【问题标题】:MySQL is it safe to use static numbers in an auto increment columnMySQL 在自动增量列中使用静态数字是否安全
【发布时间】:2014-11-10 13:04:37
【问题描述】:

我在表中有一个自动递增的 ID 字段。它位于 13321。如果我有一些产品,我想插入并使用 15,000 到 15,500 的行。

我在可以插入新数据的 Web 应用程序中有查询。查询都允许系统生成“id”字段,例如:

INSERT INTO mytable ('','value1', 'value2','value3')

如果我使用 15000 到 15500 插入我的静态数据,然后将我的自动增量 ID 重置回 13322,当系统达到 15000 时是否安全? MySQL 会知道跳到 15501 吗?

【问题讨论】:

  • 在提供的答案之上,您永远不应该手动将主键“分配”给记录。它必须始终由 MySQL 生成。看来您正在执行这些插入以维护某种序列。 这不是主键的用途。现在,你可能会认为我在夸大其词,但我向你保证——我不是。您正在做的事情会破坏您的数据集,损害性能并杀死许多其他与并发相关的事情。

标签: mysql sql auto-increment


【解决方案1】:

输入值 15000 到 15500 后,表的 AUTO_INCREMENT 属性将设置为 15501。之后,您无法将该属性重置回 13322(或任何其他小于或等于 15500 的值)。 Quote from MySQL manual:

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

MySQL 是否知道跳到 15501 部分因此变得无关紧要。

【讨论】:

    猜你喜欢
    • 2011-11-24
    • 2011-12-26
    • 1970-01-01
    • 1970-01-01
    • 2011-02-03
    • 2019-01-24
    • 2012-10-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多