对于我的自动验收测试,我希望插入以id = 1开头。 我在一台PC(XP 32bit,mysql 5.1.something)上实现了这一点(在删除表中的所有行之后),“alter table tableName auto_increment = 0”。
我现在正在设置一台新PC(Windows 7 64位,mysql 5.1.42),这个命令似乎没有效果。 我可以在information_schema.tables表中看到auto_increment值没有变回0 ---它只是继续上升。如果我尝试直接更改该表中的值,我被告知“root”@“localhost”被拒绝访问。这或许可以暗示我的问题吗?
其他stackoverflow人士曾建议“截断tableName”是一个不错的选择。我很高兴地报告这是有效的。但有人知道为什么“alter table”命令不会重置auto_increment吗?
谢谢!
答案 0 :(得分:5)
不确定为什么它在一台服务器上工作,而在另一台服务器上不起作用,但是MySQL manual states (引用,强调我的):
要更改的值
AUTO_INCREMENT
计数器将被使用 对于新行,请执行以下操作:ALTER TABLE t2 AUTO_INCREMENT = value;
您无法将计数器重置为小于或等于任何值的值 已被使用。
对 MyISAM,如果值小于或 等于当前的最大值 在AUTO_INCREMENT
列中, 值重置为当前最大值 加一个。
对于InnoDB,如果是值 小于当前的最大值 在列中,没有发生错误和 当前序列值不会改变。
也许这就是问题的原因:你试图将auto_increment
计数器重新置于0,但它已经高于该值 - 并且因为你无法将其重置为小于任何值的值已经使用过,它不起作用。