2015-08-28 73 views
-1

我在网络搜索,我没有找到一个解决方案没有删除auto_increment.But字段,我说在phpmyadmin,当我点击选项我看到Auto_increment,我试过把它放在1,但没有任何改变。那么,是否有解决方案来重置auto_increment?如何重置AUTO_INCREMENT

感谢

PS:InnoDB的

+1

http:// stackoverflow。com/questions/1485668/how-to-set-initial-value-and-auto-increment-in-mysql – Mihai

+0

它对InnoDB不起作用 –

+2

不管有没有可能,这里的正确问题应该是:“Am我做错了什么?“通常一个自动增量用于PK列,你不应该关心他们有什么值 - 他们主要是为了内部数据库工作(FK,保证唯一性和数据一致性等)。我能想到这样的请求的唯一原因是索引优化(如果有很大的差距),大多数数据库都有办法处理 –

回答

2

DBCC CHECKIDENT('tablename',RESEED,0);

1

我不知道你所说的复位是什么意思?但是如果你设置了AUTO_INCREMENT,现在你想删除它。您可以使用此:

ALTER TABLE mytable CHANGE my_col my_col INT(10) UNSIGNED NOT NULL 

如果你想RESER计数器:

ALTER TABLE tablename AUTO_INCREMENT = 1 

InnoDB的

ALTER TABLE a AUTO_INCREMENT=1 ENGINE=innoDB; 
+0

@ BK435是的,我完全不明白这个问题。添加了重置方法。 –

0

只要存在对表的数据则无法重置或其他您需要先删除所有表格。

ALTER TABLE tablename AUTO_INCREMENT = value; 
0

执行以下查询:

ALTER TABLE your table name AUTO_INCREMENT = 1;

+0

我试过,但我的auto_increment不会改变 –

+0

它的因为可能你有该表中的数据。它会导致错误(重复的主键)。 –

1

在每个人都对自己是否应该有重新设置AUTO_INCREMENT计数器的正当理由感到高兴之前,有一些情况是有道理的。生产分贝并不是这个地方,但开发和质量保证环境是不同的。

我已经创建了自己的代码来开发环境中的Fixtures,更不用说需要重复清理的单元测试数据库了。有时你希望能够截断表格而不是做一个完整的娱乐。

这是一个完全合理的请求,可能有很好的理由,特别是如果您要计算字节数并使用UNSIGNED tinyint和类似的字节优化以及一些外键。

如前所述的解决方案是:

ALTER TABLE tablename AUTO_INCREMENT = 1 

然而,这是不行的,如果有定义外键约束。

神奇的“绕开FK约束和其他鸡还是先有蛋的问题”可以与InnoDB的约束条件发生的情况是:

SET foreign_key_checks = 0; 

当一切归零背出你需要他们的方式,你然后可以打开约束与检查回来:

SET foreign_key_checks = 1; 

这似乎是它可能是OP是有实际的问题。

相关问题