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