程序员

AUTO_INCREMENT 递增序列

2018-01-26  本文已影响0人  TinyDolphin

AUTO_INCREMENT 递增序列

通用的 AUTO_INCREMENT 属性

AUTO_INCREMENT 列必须按照以下条件进行定义:

在创建之后,AUTO_INCREMENT 列将具有以下行为:

存储引擎特有的 AUTO_INCREMENT 属性

MyISAM 存储引擎拥有以下 AUTO_INCREMENT 特性:

InnoDB 存储引擎拥有以下 AUTO_INCREMENT 特性:

MEMORY 存储引擎拥有以下 AUTO_INCREMENT 特性:

使用 AUTO_INCREMENT 列需要考虑的问题

AUTO_INCREMENT 列使用

-- 为表 t 增加一个序列编号列 i
ALTER TABLE t ADD i INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY ;

-- 重置已有列的序列编号:先删除该列、再重新添加它
-- 通常不推荐这样做(可能会破坏表之间的对应关系)
ALTER TABLE t
DROP PRIMARY KEY,
DROP i,
ADD i INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
AUTO_INCREMENT = 1;

在无 AUTO_INCREMENT 的情况下生成序列

MySQL 支持一种生成序列编号的办法:使用 LAST_INSERT_ID() 函数的另一种带参数的形式。

INSERT ... ON DUPLICATE KEY UPDATE 格式

需求:记录网站访问次数

-- 既可以为一个未曾统计过的页面插入一个新行,也可以更新已有页面的计数值。
-- 第一次执行就是插入这个网址并且 value = 1 ;第二次执行就是更新这个网址的 value 值 + 1
INSERT INTO counter(name, value)
VALUES ('www.baidu.com',last_insert_id(1))
ON DUPLICATE KEY UPDATE value = last_insert_id(value+1);
SELECT last_insert_id();
-- 不使用 LAST_INSERT_ID() 的情况下,另一种递增已有页面计数器的方法
UPDATE counter SET value = value + 1 WHERE name = 'www.baidu.com';
SELECT value FROM counter WHERE name = 'www.baidu.com';
上一篇 下一篇

猜你喜欢

热点阅读