MySQL自增ID重置
MySQL自增ID重置
引言
测试表删完数据后,下一条插入的自增ID还接着上次的数往上跳,演示或本地开发时想让ID从1重新开始,就要重置AUTO_INCREMENT。DELETE清空不会归零,这是新手最容易踩的坑。
DELETE不会重置自增
DELETE FROM users;
INSERT INTO users(name) VALUES('张三');
-- 新行ID仍然接着旧最大值递增,不从1开始
DELETE只删行,自增计数器保留在内存和表结构里,不受影响。
TRUNCATE直接归零
TRUNCATE TABLE users;
TRUNCATE相当于重建空表,自增计数清零、表结构保留,速度远快于全表DELETE,但会清空全部数据且不可回滚,谨慎使用。
只改起始值不清数据
表里还有数据时,把自增起点设为当前最大值+1:
ALTER TABLE users AUTO_INCREMENT = 1;
若表内已有大于1的数据,MySQL会自动取max(id)+1作为真实起点,不会产生主键冲突。
查看当前自增值
SHOW TABLE STATUS LIKE 'users';
-- 或
SELECT AUTO_INCREMENT FROM information_schema.TABLES
WHERE TABLE_NAME='users';
注意事项
- 生产环境不要随意TRUNCATE,误删数据无法恢复;
- 自增ID一般不连续,删行出现空洞属正常,不必追求从1排列;
- 用DELETE后想重置,单独ALTER设置AUTO_INCREMENT;
- InnoDB重启后自增值从max(id)重算,与MyISAM行为不同;
- 若ID被其他表外键引用,重置前先确认依赖。
总结
DELETE不清零自增,TRUNCATE才归零重建表;保留数据用ALTER TABLE ... AUTO_INCREMENT=1设起点,查当前值用SHOW TABLE STATUS。开发演示可重置,生产环境优先只调起点、避免TRUNCATE误删。