【问题标题】:Can I use zero in a column which has the AUTO_INCREMENT attribute我可以在具有 AUTO_INCREMENT 属性的列中使用零吗
【发布时间】:2010-02-18 12:58:31
【问题描述】:

我使用的是 MySQL 5.0 服务器。我的要求是向具有自增主键的现有表中添加一个特殊行。

如果我们能够将此行的 id 设为 0,这对于项目的未来维护和管理将非常有用(因为它易于记忆且易于在人工观察中发现)。

现在,我知道 MySQL 对您将自己的值用于自动增量列没有任何问题,并且我的测试表明,我可以使用 UPDATE 查询将行的自动增量主键设置为 0。但是,有人担心这会如何影响未来 INSERT 中列的自动增量功能。

我的(有限的)实验没有显示任何奇怪的东西,我在 MySQL 文档中找不到任何针对此的具体警告。也就是说,除此之外(强调我的):http://dev.mysql.com/doc/refman/5.0/en/create-table.html

每个表只能有一个 AUTO_INCREMENT 列,它必须被索引,并且不能有 DEFAULT 值。 AUTO_INCREMENT 列只有在它只包含正值时才能正常工作。插入一个负数被认为是插入一个非常大的正数。 这样做是为了避免数字从正数“环绕”到负数时出现精度问题,并确保您不会意外获得包含 0 的 AUTO_INCREMENT 列。

我无法解释在 AUTO_INCREMENT 列中具有零值有什么问题,所以谁能告诉我,如果 AUTO_INCREMENT 列包含 0 是一件坏事?

【问题讨论】:

    标签: mysql auto-increment


    【解决方案1】:

    正如您已经发现的那样,不可能使用 INSERT 将 0 分配给自动增量字段,您需要使用 UPDATE。 AFAIK 除非您尝试转储和导入,否则连续 0 没有任何问题。但是可以通过先插入数据然后将其标记为自动增量字段来避免这种情况。

    【讨论】:

    • 重新导入很好。我没有考虑到这一点,因为我们不经常这样做,但我们会记下这一点,以防万一。据我所知,自动增量列中的 0 也没有任何问题:)。但是我引用的那条注释表明并非如此,所以我希望得到一个答案,或者解释为什么参考手册这么说,或者为什么它可能是错误的。您对自动增量列中的 0 没有任何问题有多大把握?
    • 我相信你会没事的。这一次,由于我的代码中的错误,我在自动增量字段中确实有一个 0,它没有任何不利的副作用。
    【解决方案2】:

    不推荐存储 0。例如,如果您使用mysqldump 转储表然后重新加载它,MySQL 通常会在遇到 0 值时生成新的序列号,从而导致表的内容与转储的表不同。在重新加载转储文件之前启用NO_AUTO_VALUE_ON_ZERO 可以解决此问题。 mysqldump 现在自动在其输出中包含启用NO_AUTO_VALUE_ON_ZERO 的语句,以避免此问题。

    【讨论】:

      猜你喜欢
      • 2020-05-07
      • 2021-08-18
      • 2010-12-04
      • 1970-01-01
      • 2015-11-21
      • 2017-10-03
      • 2011-04-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多