自增主键去哪了?---一次开发过程中的思考

💡 原文中文,约4400字,阅读约需11分钟。
📝

内容提要

文章讨论了MySQL中自增主键的生成及其不连续性问题。创建唯一索引后,插入相同业务ID和类型会导致错误,主键可能不连续。不同引擎的自增主键生成机制不同,InnoDB在5.7之前将自增值保存在内存中,8.0后记录在redo log中。事务回滚和批量插入也可能导致主键丢失和不连续。

🎯

关键要点

  • 文章讨论了MySQL中自增主键的生成及其不连续性问题。
  • 创建唯一索引后,插入相同业务ID和类型会导致错误,主键可能不连续。
  • 不同引擎的自增主键生成机制不同,MyISAM引擎的自增值保存在数据文件中。
  • InnoDB在5.7之前将自增值保存在内存中,8.0后记录在redo log中。
  • 事务回滚和批量插入也可能导致主键丢失和不连续。
  • 自增主键的生成可以依赖数据库,插入时主键设置为null或不设置。
  • 自增主键不连续的情况包括手动指定ID和唯一索引冲突导致的插入失败。
  • 事务回滚会导致主键丢失,因为一旦分配了主键就不会回滚。
  • 批量插入时,主键ID可能不连续,尤其是使用insert...select语句时。
  • 主键ID设置的步长不为1也会导致不连续的情况。
➡️

继续阅读