我可以在具有AUTO_INCREMENT属性的列中使用零

时间:2010-02-18 12:58:32

标签: mysql auto-increment

我正在使用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列中值为零的错误解释,所以有人可以告诉我,如果包含0的AUTO_INCREMENT列是坏事吗?

2 个答案:

答案 0 :(得分:2)

正如您已经发现的那样,使用INSERT将0设置为自动增量字段是不可能的,您需要使用UPDATE。 AFAIK除了尝试转储和导入之外,连续0都没有错。但是,可以通过先插入数据然后将其标记为自动增量字段来避免这种情况。

答案 1 :(得分:1)

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