AUTO_INCREMENT 属性可用于为新的表行行生成唯一标识:
CREATE TABLE animals (
id MEDIUMINT NOT NULL AUTO_INCREMENT,
name CHAR(30) NOT NULL,
PRIMARY KEY (id)
);
INSERT INTO animals (name) VALUES
('dog'),('cat'),('penguin'),
('lax'),('whale'),('ostrich');
SELECT * FROM animals;
执行结果为:
+----+---------+
| id | name |
+----+---------+
| 1 | dog |
| 2 | cat |
| 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,'groundhog');
如果声明了列为 NOT NULL,则还可以分配 NULL 给列以生成序列号。例如:
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 | name |
+-----+-----------+
| 1 | dog |
| 2 | cat |
| 3 | penguin |
| 4 | lax |
| 5 | whale |
| 6 | ostrich |
| 7 | groundhog |
| 8 | squirrel |
| 100 | rabbit |
| 101 | mouse |
+-----+-----------+
更新现有 AUTO_INCREMENT 列值也会重置 AUTO_INCREMENT 序列。
你可以使用 LAST_INSERT_ID() SQL 函数或 mysql_insert_id() C API 函数检索 AUTO_INCREMENT 最新自动生成的值。这些函数是 connection-specific 的,因此它们的返回值不受另一个执行插入操作的连接影响。
对于 AUTO_INCREMENT 列,请使用最小的整数数据类型,该类型要足够大以保存所需的最大序列值。当列达到数据类型的上限时,下一次生成序列号的尝试将失败。如果可能,请使用 UNSIGNED 以允许更大的范围。例如,如果你使用 TINYINT,允许的最大序列号为 127。 对于 TINYINT UNSIGNED,最大值为 255。
注意
对于多行插入,LAST_INSERT_ID() 和 mysql_insert_id() 实际返回从第一行开始的 AUTO_INCREMENT 值。这使得在多个服务器上执行多行插入可以正确执行。
要以 AUTO_INCREMENT 以 1 以外的值开头,请使用 CREATE TABLE 或 ALTER TABLE 设置该值,如下所示:
ALTER TABLE tbl AUTO_INCREMENT = 100;
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于