对于批量插入数据的操作,MySQL申请自增的策略为:
在批量插入语句执行过程中,申请策略: 1、第一次申请自增值时,会分配1个 2、在N次申请自增值时,会分配上一次(第N-1次)的2倍。
测试Demo:
## 创建测试表 CREATE TABLE `tb000` ( `id` int(11) NOT NULL auto_increment primary key, `c1` int(11) DEFAULT NULL, `c2` varchar(5) DEFAULT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8; ## 插入4条数据,分别三次获取自增值:(1),(2,3),(4,5,6,7) INSERT INTO tb000(c1,c2) SELECT 1,1 FROM information_schema.tables LIMIT 4; ## 再次插入一条记录,获取自增值(8) INSERT INTO tb000(c1,c2)VALUES(2,2); SELECT * FROM tb000;
===================================================================
其他跳号原因:
1、语句显式插入比当前自增列更大的值
2、语句执行获取到自增值后所在事务被回滚