相关链接:
背景描述
与相关链接《Be Careful...》中的案例很类似,某个业务系统中也有两张表,暂且称其为 pending_task 和 task_archive。它们的存储引擎都为 InnoDB;MySQL 版本为 5.7。
-
业务系统会先在 pending_task 表中创建一个新的 task 记录;
-
此表使用自增主键,作为 task 的唯一标识 —— task_id;
-
task 结束后 pending_task 表中的相应记录会被删除;
-
task_archive 表用于记录 task 的最终存档信息,主键就是 task_id。
先不讨论这种设计是否恰当。
该系统平时一切正常,但是一旦 MySQL 被重启,就很可能在向 task_archive 插入数据时引发重复主

在MySQL 5.7及以前版本,InnoDB表的auto-increment计数器重启后会丢失,可能导致重复ID。MySQL 8.0改进了此逻辑,但仍有潜在风险。解决方案包括升级到MySQL 8.0、使用MyISAM、弃用自增字段或保留最大值记录。

1198

被折叠的 条评论
为什么被折叠?



