这AUTO_INCREMENT
属性可用于为新行生成唯一标识:
创建表动物(ID介质不是null auto_increment,name char(30)不是null,主键(ID));插入动物(名称)值('狗'),('cat'),('penguin'),('lax'),('鲸'),('鸵鸟');SELECT * FROM动物;
返回:
+ ---- + --------- + |ID |名称|+ ---- + --------- + |1 |狗||2 |猫|| 3 | penguin | | 4 | lax | | 5 | whale | | 6 | ostrich | +----+---------+
没有为此指定任何价值AUTO_INCREMENT
列,MySQL自动分配序列号。还可以显式地将0指定给列以生成序列号,除非no_auto_value_on_zero.
启用SQL模式。例如:
INSERT INTO animals (id,name) VALUES(0,'土拨鼠');
如果列被声明没有空
,也可以分配零
到列以生成序列号。例如:
插入动物(ID,名称)值(null,'松鼠');
当您将任何其他值插入AUTO_INCREMENT
列,该列被设置为该值,并重置序列,以便下一个自动生成的值依次从最大的列值开始。例如:
INSERT INTO animals (id,name) VALUES(100,'兔子');INSERT INTO animals (id,name) VALUES(NULL,'mouse');SELECT * FROM动物;+-----+-----------+ | id |名称 | +-----+-----------+ | 猫狗1 | | | 2 | | | 3 |企鹅| | 4 |松懈| | 5 |鲸鱼| | 6 |鸵鸟| | 7 |土拨鼠| | 8 |松鼠| | 100 | |兔子| 101 |鼠标 | +-----+-----------+
更新现有AUTO_INCREMENT
的列值。Innodb.
表并未重置AUTO_INCREMENT
序列,因为它myisam.
和NDB.
表。
您可以检索最新的自动生成AUTO_INCREMENT
价值与last_insert_id()
SQL函数或mysql_insert_id ()
C API函数。这些函数是特定于连接的,因此它们的返回值不受同样执行插入的另一个连接的影响。
使用最小的整数数据类型AUTO_INCREMENT
列足够大的列,以保持您需要的最大序列值。当列达到数据类型的上限时,下一个生成序列号的尝试失败。使用无符号
属性如果可能,允许更大的范围。例如,如果您使用Tinyint.
,最大允许序列号为127.对于Tinyint unsigned
,最大255个。看到第11.1.2节,"整型类型(精确值)- Integer, INT, SMALLINT, TINYINT, MEDIUMINT, BIGINT "所有整数类型的范围。
对于多行插入,last_insert_id()
和mysql_insert_id ()
实际返回AUTO_INCREMENT
关键的第一个插入行。这样就可以在复制设置中的其他服务器上正确地复制多行插入。
从一个开始AUTO_INCREMENT
如果值不是1,则用创建表
或改变表
, 像这样:
mysql> ALTER TABLE tbl AUTO_INCREMENT = 100;
有关的信息AUTO_INCREMENT
具体用法Innodb.
, 看第14.6.1.6节“Innodb中的Auto_Increment处理”.
为了
myisam.
表,你可以指定AUTO_INCREMENT
在多列索引中的辅助列上。在这种情况下,产生的值AUTO_INCREMENT
列的计算方式为最大限度(
.当您希望将数据放入有序组中时,这很有用。auto_increment_column.
)+ 1前缀=给予前缀
CREATE TABLE animals (grp ENUM('fish','哺乳动物','bird') 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 | dog | | mammal | 2 | cat | | mammal | 3 | whale | | bird | 1 | penguin | | bird | 2 | ostrich | +--------+----+---------+
在这种情况下(当
AUTO_INCREMENT
列是多列索引的一部分),AUTO_INCREMENT
如果用最大的行删除该行,则重复使用值AUTO_INCREMENT
任何组中的值。这甚至发生在myisam.
桌子,哪个AUTO_INCREMENT
通常不使用值。如果是
AUTO_INCREMENT
列是多个索引的一部分,MySQL使用从中开始的索引生成序列值AUTO_INCREMENT
列,如果有一个。例如,如果动物
表包含索引主键(GRP,ID)
和索引(ID)
,MySQL会忽略主键
用于生成序列值。因此,该表将包含单个序列,而不是每个序列GRP.
价值。
更多信息AUTO_INCREMENT
可在此处提供:
如何分配
AUTO_INCREMENT
属性到列:第13.1.18节“创建表陈述”,Section 13.1.8, " ALTER TABLE Statement ".如何
AUTO_INCREMENT
行为取决于no_auto_value_on_zero.
SQL模式:第5.1.10节“服务器SQL模式”.如何使用
last_insert_id()
找到包含最新的行的函数AUTO_INCREMENT
价值:第12.16节“信息功能”.设置
AUTO_INCREMENT
要使用的值:第5.1.7节,“服务器系统变量”.AUTO_INCREMENT
和复制:第16.4.1.1节,“复制和AUTO_INCREMENT”.与服务器系统相关的变量
AUTO_INCREMENT
(auto_increment_increment
和auto_increment_offset
)可用于复制:第5.1.7节,“服务器系统变量”.