mysql重置auto_increment
日常使用mysql设计表的时候,很常用的一个策略设计一个自增的列来当做主键,对于当前表的自增值可以用show create table xxx看到。最近遇到一个问题是想更改这个自增的值,让他从另一个基数开始计算,解决的思路如下:
- 如果是想整张表重置,就是原先数据丢弃掉了,两种方案:
1 2 3 4 5 | //方案1:好处, 可以设置 AUTO_INCREMENT 为任意值开始,但是数据量大的话清表时间很久 delete from tbl; alter table tbl auto_increment=1 //方案2:好处:快且简单,但是新开始的基数由建表sql语句决定 truncate tbl; |
- 如果是想从下条语句开始调整:
1 | alter table tbl auto_increment=1; |
myisam和innodb下,如果自增列已存在m>n,表xxx的auto_increment值还是为m;
- 如果update 自增列为p(p>m),myisam下自增改为由p开始,innodb下依旧由m开始;
- 如果insert自增列为p(p>m),myisam和innodb下,均由p开始自增
- 如果replace更新的自增值大于当前auto_increment,两个引擎就都会更新表的auto_increment状态;
- delete不影响auto_increment,truncate会清空auto_increment 。
注意: innodb引擎下,update不会更新表的auto_increment状态。
参考文章:mysql自增字段重排 mysql删除表后自增字段从1开始