相关的文档10bet官方网站 下载本手册 本手册摘录

3.6.9使用auto_increment.

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.启用S​​QL模式。例如:

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;

innodb笔记

有关的信息AUTO_INCREMENT具体用法Innodb., 看第14.6.1.6节“Innodb中的Auto_Increment处理”

MyISAM笔记

  • 为了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可在此处提供: