自增字段(如 MySQL 的 AUTO_INCREMENT、SQL Server 的 IDENTITY、PostgreSQL 的 SERIAL / IDENTITY)出现不连续是非常常见的现象,绝大多数情况下不是 bug,而是设计使然。
下面按常见原因系统说明:
BEGIN;
INSERT INTO t(id) VALUES (NULL); -- 分配 id=10
ROLLBACK;
✅ 结果:10 永远缺失
例如:
只要走到了“分配自增 id”这一步,id 就会消耗掉。
INSERT INTO t(id) VALUES (100);
之后:
INSERT INTO t(id) VALUES (NULL);
DELETE FROM t WHERE id = 50;
⚠️ TRUNCATE 才会重置(部分数据库)
1, 2, 4, 3, 6, 5
这是性能取舍的结果。
✅ MySQL 8.0 已持久化自增信息
auto_increment_increment=2)INSERT INTO t VALUES (...),(...),(...); -- 执行一半失败
已分配但未提交的 id 会丢失。
❌ 不建议依赖自增连续
✅ 可选方案:
ROW_NUMBER()自增字段不连续 = 正常设计,不是错误
如果你愿意,可以告诉我:
我可以给你更精确的解释和优化建议。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。