MySQL 有一个所谓的扩展插入语句,就是 insert tablename 列 1,列 2,列 3 values (value1,value2,value3),(value1,value2,value3),(value1,value2,value3)........
这条语句能一次性插入 n 条记录,只受限 mysql 设置的数据包大小,但是它有个奇怪的毛病,就是你这张表如果是个自增的主键,而且你在插入的时候没有主键值而让它自动生成的话,就会产生所谓的“主键空洞”,就是你插入 5 条记录进去,本来这个时候你觉得主键记录应该到 6 了,你一看记录,会发现它停在 11 (甚至更大)的位置上,你再插入的时候你会发现果然是从 11 开始的, 5-11 中间的主键就这么失踪了。 我翻了很久的 MySQL 文档,文档说这是因为 MySQL 不能判断这次会有多少条记录进入导致的,它就会尽可能的把需要的主键估计值估计的很高甚至翻倍导致的。而且我没有找到应对这个问题的办法。唯一的办法就是你在批量插入的时候自己加上主键记录的值,就没这个问题了。难道这是这个扩展插入语句必须的?