自增 ID(如 MySQL 的 AUTO_INCREMENT)出现跳号(不连续)是非常常见的现象,通常并不是 bug,而是由数据库的设计机制或运行行为导致的。下面按常见原因系统说明:
BEGIN;
INSERT INTO t(id, name) VALUES (NULL, 'a'); -- 分配 id=10
ROLLBACK;
✅ 这是预期行为
例如:
INSERT INTO t(id, name) VALUES (NULL, 'dup'); -- 冲突
INSERT INTO t(name) VALUES ('a'),('b'),('c');
DELETE FROM t WHERE id = 100;
❗ 自增 ID 只增不回收
AUTO_INCREMENT 只存在于内存MySQL 8.0 已修复(持久化到 redo log)
INSERT INTO t(id, name) VALUES (1000, 'x');
auto_increment_increment / auto_increment_offset实例1: 1,3,5,7
实例2: 2,4,6,8
TRUNCATE TABLE t;
✅ 一般不需要
❌ 不应依赖 ID 连续做业务判断
可选方案:
ROW_NUMBER()如果你愿意,可以告诉我:
我可以更精确地判断原因。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。