AUTO_INCREMENT简介
MySQL的AUTO_INCREMENT
属性可以用于在插入新的记录的时候,进行主键自增。
例如执行下面的SQL:
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总结
id列设置为AUTO_INCREMENT以后,在inserte语句中,
如果id列为空,
或者id列值为0 (SQL Mode不是NO_AUTO_VALUE_ON_ZERO),
或者id列值NULL (id列为NOT NULL),
那么id将自动增长。通过insert语句在AUTO_INCREMENT列插入更大的值,则序列会被重置为最大值依次增加。
在使用MySQL时,若表中含自增字段(auto_increment类型),则向表中insert一条记录后,可以调用last_insert_id()来获得最近insert的那行记录的自增字段值。
一道面试题
问:一张表,里面有ID自增主键,当insert了17条记录之后,删除了第15,16,17条记录,再把Mysql重启,再insert一条记录,这条记录的ID是18还是15 ?
答:如果表的存储引擎是MyISAM,id是18,因为MyISAM会将最大id记录在文件里;如果表的存储引擎是InnoDB,id是15,因为InnoDB会将最大id记录在内存里,重启后会丢失。
Links
- 【https://dev.mysql.com/doc/refman/5.6/en/example-auto-increment.html】
- 【https://blog.csdn.net/stevejobson/article/details/54693090】
- 【https://github.com/jaywcjlove/mysql-tutorial/blob/master/chapter3/3.5.md】
- 【https://blog.csdn.net/jibing57/article/details/7572868】
- 【https://mp.weixin.qq.com/s/XqtvyeUeuLQKx_P1e4wtrA】
- 【https://dev.mysql.com/doc/refman/8.0/en/innodb-auto-increment-handling.html】
- 【https://dev.mysql.com/doc/refman/5.7/en/innodb-auto-increment-handling.html】
- 【https://www.jianshu.com/p/8773795ddb24】