likes
comments
collection
share

MySQL自增主键值回溯问题

作者站长头像
站长
· 阅读数 36

我们使用MySQL时,通常每一张表都会有一个自增主键ID,每新增一条数据,ID值就会自增1。但在8.0之前版本的MySQL中,这个自增值会存在一个回溯的问题。 例如,在一个新表中插入三条主键为1、2、3的数据行,这时候用SHOW CREATE TABLE命令查看该表的AUTO_INCREMENT的值是4,这是没问题的。 然后把ID=3的数据行删掉,再次查询AUTO_INCREMENT的值,依然是4,这也是没问题的。 但如果重启一下或则宕机后MySQL,这个值就会变回3,而不是4,发生了回溯。 这是因为AUTO_INCREMENT的值只存储于内存中,不会持久化到磁盘,每次启动数据库时,MySQL会通过计算max(auto_increment字段) + 1,重新作为该表下一次的主键ID的自增值。这个问题直至MySQL 8.0才修复。

那这种会发生什么问题呢?会导致业务数据错乱,例如:小明的账户userid是1,后来小明的账户被删除了,数据库刚好宕机重启了,然后小红注册了新账户,分配的userid又是1,这时候,如果别人拿着小明的userid来查数据,数据库会返回小红的数据。

原文:blog.csdn.net/ljfrocky/ar…

转载自:https://juejin.cn/post/7148302193714544654
评论
请登录