mysql主键递增,之前已经插入的id有1,2,3,4,5,手动插入的那条记录id=15,那后面让它自动生成主键,会是从15开始,还是从5开始

1. 关键结论

  • 自动生成 的主键会从 16 ​ 开始(15+1),不是从5开始

  • 手动插入 id=15不会报错(只要不重复)

  • 后续插入时,如果遇到已存在的id(如15)才会报主键冲突错误

2. 具体行为演示

复制代码
-- 1. 创建测试表
CREATE TABLE test_table (
    id INT PRIMARY KEY AUTO_INCREMENT,
    name VARCHAR(50)
);

-- 2. 插入1-5
INSERT INTO test_table (id, name) VALUES 
(1, '记录1'), (2, '记录2'), (3, '记录3'), 
(4, '记录4'), (5, '记录5');

-- 3. 手动插入id=15
INSERT INTO test_table (id, name) VALUES (15, '记录15');

-- 4. 查看当前自增值
SHOW TABLE STATUS LIKE 'test_table';
-- 此时 AUTO_INCREMENT 值会是 16

-- 5. 自动插入下一条
INSERT INTO test_table (name) VALUES ('自动记录');
-- 这条记录的id会是 16,不是6!

-- 6. 再尝试插入id=15会报错
INSERT INTO test_table (id, name) VALUES (15, '重复记录');
-- 错误: Duplicate entry '15' for key 'PRIMARY'

3. 底层机制

  • MySQL 会维护一个 AUTO_INCREMENT计数器

  • 每次插入后,计数器会更新为 MAX(id) + 1

  • 手动插入大值会"抬升"计数器

4. 查看当前自增值的几种方法

复制代码
-- 方法1:查看表状态
SHOW TABLE STATUS LIKE '表名';

-- 方法2:查询信息模式
SELECT AUTO_INCREMENT 
FROM INFORMATION_SCHEMA.TABLES 
WHERE TABLE_SCHEMA = '数据库名' 
AND TABLE_NAME = '表名';

-- 方法3:MAX函数(不准确,如果手动插入了更大的值)
SELECT MAX(id) FROM 表名;

5. 特殊情况说明

场景 结果
手动插入id=15 成功,计数器变为16
删除id=15的记录 计数器不会回退
插入id=20 计数器变为21
重启MySQL服务 计数器可能重新计算(取决于引擎)

6. 注意事项

  1. InnoDB 和 MyISAM 行为相同

  2. 即使删除记录,自增值也不会回退

  3. 可以手动修改自增值:

    复制代码
    ALTER TABLE test_table AUTO_INCREMENT = 100;
  4. 并发插入时,自增是线程安全的

7. 最佳实践建议

复制代码
-- 如果想让自增从特定值开始
ALTER TABLE your_table AUTO_INCREMENT = 新值;

-- 如果发生"空洞"(跳号),通常是正常现象
-- 原因:事务回滚、记录删除、手动插入大值等

总结:手动插入id=15后,后续自动生成会从16开始,不会从5开始,也不会在15处报错(除非重复插入)。

相关推荐
倔强的石头_3 小时前
kingbase备份与恢复实战(二)—— sys_dump库级逻辑备份与恢复(Windows详细步骤)
数据库
jiayou641 天前
KingbaseES 实战:深度解析数据库对象访问权限管理
数据库
于眠牧北1 天前
MySQL的锁类型,表锁,行锁,MVCC中所使用的临键锁
mysql
李广坤2 天前
MySQL 大表字段变更实践(改名 + 改类型 + 改长度)
数据库
Turnip12023 天前
深度解析:为什么简单的数据库"写操作"会在 MySQL 中卡住?
后端·mysql
爱可生开源社区3 天前
2026 年,优秀的 DBA 需要具备哪些素质?
数据库·人工智能·dba
随逸1773 天前
《从零搭建NestJS项目》
数据库·typescript
加号34 天前
windows系统下mysql多源数据库同步部署
数据库·windows·mysql
シ風箏4 天前
MySQL【部署 04】Docker部署 MySQL8.0.32 版本(网盘镜像及启动命令分享)
数据库·mysql·docker
李慕婉学姐4 天前
Springboot智慧社区系统设计与开发6n99s526(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
数据库·spring boot·后端