【问题标题】:Mysql 5.1.42 alter table auto_increment = 0 doesn't work, truncate doesMysql 5.1.42 alter table auto_increment = 0 不起作用,truncate 起作用
【发布时间】:2011-01-03 05:30:21
【问题描述】:

对于我的自动化验收测试,我希望插入以 id=1 开头。 我在一台PC(XP 32bit,mysql 5.1.something)上实现了这一点(在从表中删除所有行之后),“alter table tableName auto_increment = 0”。

我现在正在设置一台新PC(Windows 7 64bit,mysql 5.1.42),这个命令似乎没有效果。 我可以在 information_schema.tables 表中看到 auto_increment 值没有变回 0 --- 它只是不断上升。如果我尝试直接更改该表中的值,我会被告知拒绝访问'root'@'localhost'。这可能暗示了我的问题吗?

其他 stackoverflow 人建议“从 tableName 截断”是一个不错的选择。我很高兴地报告这行得通。但是有谁知道为什么“alter table”命令不会重置 auto_increment?

谢谢!

【问题讨论】:

    标签: mysql auto-increment truncate alter-table


    【解决方案1】:

    不知道为什么它在一台服务器上工作,而在另一台服务器上不工作,但MySQL manual states (引用,强调我的)

    改变值 AUTO_INCREMENT 要使用的计数器 对于新行,请执行以下操作:

    ALTER TABLE t2 AUTO_INCREMENT = value;
    

    您不能将计数器重置为小于或等于任何 已经使用过
    对于 MyISAM,如果值小于或 等于当前最大值 在AUTO_INCREMENT 列中, 值被重置为当前最大值 加一。
    对于 InnoDB,如果值 小于当前最大值 在列中,没有发生错误,并且 当前序列值没有改变。

    也许这就是问题的原因:您正试图将auto_increment 计数器放回 0,但它已经高于该值 - 因为您无法将其重置为小于任何已经存在的值用过,没用。

    【讨论】:

    • 谢谢帕斯卡。看来我的表在此安装中使用的是 myISAM,而不是我更熟悉的 InnoDB。
    • 你需要先让表为空,然后重置。我的陷阱是我先尝试重置...
    猜你喜欢
    • 2018-12-27
    • 1970-01-01
    • 1970-01-01
    • 2020-10-01
    • 2017-06-24
    • 2018-12-16
    • 2012-09-17
    • 1970-01-01
    相关资源
    最近更新 更多