自增主键去哪了?---一次开发过程中的思考
💡
原文中文,约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也会导致不连续的情况。
➡️