自增 ID(如 MySQL 的 AUTO_INCREMENT)看起来应该是连续递增的,但在实际运行中经常会出现不连续的情况。主要原因如下:
这是最常见原因。
BEGIN;
INSERT INTO user VALUES (NULL, 'Tom'); -- 分配 ID = 10
ROLLBACK;
✅ 结果:ID 不连续(10 被“吃掉”)
例如:
INSERT INTO user(id, name) VALUES (10, 'Tom'); -- 冲突
自增计数器已经前进,但数据没写进去。
INSERT INTO user(id, name) VALUES (100, 'Admin');
之后自增会从 101 开始,前面的 ID 被“跳过”。
DELETE FROM user WHERE id = 50;
在高并发场景:
结果:20 缺失
在 MySQL 5.7 及以前:
AUTO_INCREMENT 值不持久化✅ MySQL 8.0 已修复此问题
如果你不是用数据库自增,而是:
那本身就不是连续设计目标。
自增 ID 保证“唯一 + 递增”,但不保证“连续”
如果你需要:
那就不能依赖自增 ID,需要额外方案(计数器表、业务号生成器等)。
如果你说的是某个具体数据库(MySQL / PostgreSQL / Oracle),我可以给你更针对性的解释。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。