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处报错(除非重复插入)。

相关推荐
吴声子夜歌8 分钟前
ES6——正则的扩展详解
前端·mysql·es6
xixingzhe213 分钟前
Mysql统计空间增量
数据库·mysql
程序员萌萌19 分钟前
Java之mysql实战讲解(三):聚簇索引与非聚簇索引
java·mysql·聚簇索引
程序员萌萌1 小时前
Redis的缓存机制和淘汰策略详解
数据库·redis·缓存机制·淘汰策略
不剪发的Tony老师1 小时前
SQLite 3.53.0版本发布,重要更新
数据库·sqlite
Bczheng11 小时前
九.Berkeley DB数据库 序列化和钱包管理(1)
数据库
cozil1 小时前
记录mysql创建数据库未指定字符集引发的问题及解决方法
数据库·mysql
架构师老Y2 小时前
013、数据库性能优化:索引、查询与连接池
数据库·python·oracle·性能优化·架构
AC赳赳老秦2 小时前
OpenClaw数据库高效操作指南:MySQL/PostgreSQL批量处理与数据迁移实战
大数据·数据库·mysql·elasticsearch·postgresql·deepseek·openclaw
一 乐2 小时前
校园线上招聘|基于springboot + vue校园线上招聘系统(源码+数据库+文档)
java·数据库·vue.js·spring boot·论文·毕设·校园线上招聘系统