-
自动增长的时候如果有其他列是也是唯一的(主键、唯一键都行),但是添加元素的时候重复添加导致失败,也会导致+1,下一次成功添加的时候就比之前+2了,这样每失败一次都会+1。
-
例如:
CREATE TABLE t15( id INT PRIMARY KEY AUTO_INCREMENT, num INT UNIQUE); INSERT INTO t15 VALUES(NULL,1); INSERT INTO t15 VALUES(NULL,2); INSERT INTO t15 VALUES(NULL,3); SELECT * FROM t15; -- 这里查看表表里有(1,1),(2,2),(3,3) -- 再次插入(null,3) INSERT INTO t15 VALUES(NULL,3); -- 由于num参数是unique,因此插入失败,此时插入(null,4) INSERT INTO t15 VALUES(NULL,4); SELECT * FROM t15; -- 查看表,发现此时插入的不是(4,4)而是(5,4)
-
-
自增长底层是找到当前字段中最大的然后+1,如果指定插入了一个比现在增长到的值更大的数,下次自增长从这里开始。
-
但是这个自增长的值只会变大不会变小,即如果现在最大的是4,你插入的时候指定7,那么下一次自增长从7开始,但是如果这个时候你把234全部删除了,只剩下1,自增长还是从4开始。
-
下列语句删除1,2之后自动插入,查看表可以发现插入的仍然是3:
CREATE TABLE t14( id INT PRIMARY KEY AUTO_INCREMENT); INSERT INTO t14 VALUES(NULL); INSERT INTO t14 VALUES(NULL); DELETE FROM t14 WHERE id = 1; DELETE FROM t14 WHERE id = 2; INSERT INTO t14 VALUES(NULL); SELECT * FROM t14;
-
-
如果是
update
修改了已经插入的值,不会有影响。 -
但是之前说了,如果是因为重复导致的添加失败,仍会+1,但是不会插入,下次插入就加了2,如果使用
update
修改一个值例如2改成5,当自增到4的时候再次调用,就会失败,因为5重复了,下一次再调用就会插入6。CREATE TABLE t13( id INT PRIMARY KEY AUTO_INCREMENT); INSERT INTO t13 VALUES(NULL); INSERT INTO t13 VALUES(NULL); INSERT INTO t13 VALUES(NULL); UPDATE t13 SET id = 5 WHERE id = 2; INSERT INTO t13 VALUES(NULL);
-
此时查看发现列表:
-
此时自增长到了4,如果再次插入,则会因为5重复而失败。
-
-