诺亚方舟

沉淀

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开始

发表评论

电子邮件地址不会被公开。 必填项已用*标注

您可以使用这些HTML标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>