当应用自动增量时,MySQL会重复使用已删除的ID吗?

Eae*_*Eae 23 mysql auto-increment

http://dev.mysql.com/doc/refman/5.0/en/example-auto-increment.html

我正在阅读的那份文件似乎是这样的:

"在这种情况下(当AUTO_INCREMENT列是多列索引的一部分时),如果删除任何组中具有最大AUTO_INCREMENT值的行,则重用AUTO_INCREMENT值."

我真的不明白在那里说了些什么.这些值不应该自动重复使用吗?

提前致谢...

rAj*_*AjA 22

重新启动数据库时,InnoDB会重置auto_increment字段.

当InnoDB重新启动时,它会在列中找到最高值,然后从那里开始.

这在MyISAM中不会发生,因为它会缓存最后一个递增的id.

更新

此功能/错误自2003年以来一直存在,可能导致严重问题.以下面的例子为例,

  1. 表t1具有auto-inc主键.

  2. 表t2在t1中有一个主键列,没有外键"约束".换句话说,当在t1中删除行时,t2中的相应行是孤立的.

  3. 正如我们所知,InnoDB重启后,可以重新发出一个id .因此,t2中的孤立行可能错误地链接到t1中的新行.

这个bug最终在MySQL 8.0.0 WL#6204中修复- InnoDB为autoinc列的持久最大值.

InnoDB将跟踪最大值,并在重新启动时保留该最大值并从那里开始.


Par*_*dar 8

如果主键字段也是auto_increment,则无论删除多少行(或按什么顺序),都不会再次使用不再存在的ID,并且每行的字段会连续递增.

但是,当您的主键由多个字段(EG为auto_increment字段和另一个字段)组成时,auto_increment字段将被重用,并且仅当已删除的id是最后一个id时才会重复使用.这意味着如果您有1,2,3,4和5之类的值,并且删除字段值为5的行,则下一行的ID为5.但是,如果您删除行如果id为2,则不再使用,下一行的id为6.

  • 如果主节点达到最大值会发生什么情况,它会重用已删除的 id 吗? (4认同)