自增序列回降
开发时遇到的一个问题
设计:
某业务数据库设计包含两张表,主表A和子表B,B有A的主键ID作为业务外键(未在mysql中建立外键)。开发时设计删除A表中的数据并未删除B表中的关联数据。
问题:
运行一段时间后发现新插入的A表数据会和B表未删除数据关联,即新插入的A的主键,在B中已存在外键关联。
原因:
MYSQL InnoDB 的自增序列计数器是存在内存中的,如果数据库重启服务,序列计数器会消失,mysql会在下次插入数据之前,查找本表中该列的最大值,以该值初始化计数器,然后继续自增。
解决:
还是老老实实删除子表数据吧。。
ps:如果发生事物回滚等操作会导致序列跳值现象。mysql只保证自增,不保证连续。
本文探讨了MySQL InnoDB引擎下自增序列的回降问题,分析了在未删除子表关联数据情况下,新数据与旧数据关联导致的问题,并解释了自增序列计数器的工作原理。同时,提到了事务回滚可能引起的序列跳值现象。
698

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



