的AUTO_INCREMENT
属性可用于为新行生成唯一标识:
CREATE TABLE animals (id MEDIUMINT NOT NULL AUTO_INCREMENT, name CHAR(30) NOT NULL, PRIMARY KEY (id));插入动物(名字)值(“狗”)(“猫”)(“企鹅”)(“宽松”)(“鲸鱼”)(“鸵鸟”);SELECT * FROM animals;
返回:
+----+---------+ | id |名称 | +----+---------+ | 猫狗1 | | | 2 | | | 3 |企鹅| | 4 |松懈| | 5 |鲸鱼| | 6 |鸵鸟 | +----+---------+
对象没有指定值AUTO_INCREMENT
列,因此MySQL自动分配序列号。也可以显式地将0赋给列以生成序列号,除非NO_AUTO_VALUE_ON_ZERO
启用SQL模式。例如:
INSERT INTO animals (id,name) VALUES(0,'groundhog');
如果声明了列非空
,也可以赋值零
以生成序列号。例如:
INSERT INTO animals (id,name) VALUES(NULL,'squirrel');
对象中插入任何其他值时AUTO_INCREMENT
列,则将该列设置为该值并重置序列,以便下一个自动生成的值按顺序从最大的列值开始。例如:
INSERT INTO animals (id,name) VALUES(100,'rabbit');INSERT INTO animals (id,name) VALUES(NULL,'mouse');SELECT * FROM animals;+-----+-----------+ | id |名称 | +-----+-----------+ | 猫狗1 | | | 2 | | | 3 |企鹅| | 4 |松懈| | 5 |鲸鱼| | 6 |鸵鸟| | 7 |土拨鼠| | 8 |松鼠| | 100 | |兔子| 101 |鼠标 | +-----+-----------+
更新现有的AUTO_INCREMENT
的值也将重置AUTO_INCREMENT
序列。
您可以检索最近自动生成的AUTO_INCREMENT
的值LAST_INSERT_ID ()
SQL函数或mysql_insert_id ()
C API函数。这些函数是特定于连接的,因此它们的返回值不受同样执行插入的另一个连接的影响。
类使用最小的整数数据类型AUTO_INCREMENT
列,其大小足以容纳所需的最大序列值。当列达到数据类型的上限时,下次生成序列号的尝试将失败。使用无符号
属性允许更大的范围。例如,如果你使用非常小的整数
,最大允许序号为127。为非常小的整数无符号
,最大值为255。看到整数类型(精确值)- Integer, INT, SMALLINT, TINYINT, MEDIUMINT, BIGINT所有整数类型的范围。
对于多行插入,LAST_INSERT_ID ()
而且mysql_insert_id ()
返回AUTO_INCREMENT
钥匙从第一个插入的行。这允许在复制设置中在其他服务器上正确复制多行插入。
从…开始AUTO_INCREMENT
值不是1,设置该值为创建表
或ALTER TABLE
,像这样:
修改表AUTO_INCREMENT = 100;
有关AUTO_INCREMENT
特定于InnoDB
,请参阅InnoDB中的AUTO_INCREMENT处理.
为
MyISAM
表,您可以指定AUTO_INCREMENT
在多列索引的辅助列上。在本例中,生成的值AUTO_INCREMENT
列计算为MAX (
.当您希望将数据放入有序组中时,这非常有用。auto_increment_column
) + 1 WHERE prefix=given-prefix
CREATE TABLE animals (grp ENUM('fish','哺乳动物','鸟类')NOT NULL, id MEDIUMINT NOT NULL AUTO_INCREMENT, name CHAR(30) NOT NULL, PRIMARY KEY (grp,id)) ENGINE=MyISAM;插入动物(grp)值(“哺乳动物”,“狗”)(“哺乳动物”,“猫”)(“鸟”,“企鹅”)(“鱼”,“宽松”)(“哺乳动物”,“鲸鱼”)(“鸟”,“鸵鸟”);SELECT * FROM animals ORDER BY grp,id;
返回:
+--------+----+---------+ | grp | | id名称 | +--------+----+---------+ | 哺乳动物鱼| 1 |松懈| | | 1 |狗| |哺乳动物猫| 2 | | | | 3 |鲸鱼哺乳动物| |鸟| 1 |企鹅| | | 2 |的鸵鸟 | +--------+----+---------+
在这种情况下(当
AUTO_INCREMENT
列是多列索引的一部分),AUTO_INCREMENT
如果删除最大的行,则值将被重用AUTO_INCREMENT
任何组的值。这甚至发生在MyISAM
表,用于AUTO_INCREMENT
值通常不会被重用。如果
AUTO_INCREMENT
列是多个索引的一部分,MySQL使用以AUTO_INCREMENT
列,如果有的话。例如,如果动物
表包含索引主键:grp, id
而且指数(id)
, MySQL将忽略主键
用于生成序列值。因此,该表将包含单个序列,而不是每个序列grp
价值。
更多关于AUTO_INCREMENT
可在此下载:
如何分配
AUTO_INCREMENT
属性赋给列:CREATE TABLE语句,ALTER TABLE语句.如何
AUTO_INCREMENT
行为取决于NO_AUTO_VALUE_ON_ZERO
SQL模式:Server SQL模式.如何使用
LAST_INSERT_ID ()
函数查找包含最新数据的行AUTO_INCREMENT
值:信息功能.设置
AUTO_INCREMENT
使用的值:服务器系统变量.AUTO_INCREMENT
和复制:复制和AUTO_INCREMENT.相关的服务器系统变量
AUTO_INCREMENT
(auto_increment_increment
而且auto_increment_offset
),可用于复制:服务器系统变量.