我有一个表“ Bestelling”,其中包含4列:“ Id”(PK),“ KlantId”,“ Datum”,“ BestellingsTypeId”,现在我想使列ID为auto_increment,但是当我尝试这样做时那,我得到这个错误: 通用标签

有人知道吗?

有帮助吗?

解决方案

如果表包含ID为0(或负数)的现有记录,则会发生这种情况。更新所有现有记录以使用正值将允许在该列上设置auto_increment。

编辑:有些人问那个0是如何到达那里的。为了澄清起见,《 MySQL参考手册》指出:“对于数字类型,默认值为0,但对于用AUTO_INCREMENT属性声明的整数或浮点类型,默认值为序列中的下一个值。”因此,如果在启用auto_increment之前对表执行插入操作时未提供数值列的值,则在插入过程中将使用默认值0。可以在 https://dev.mysql.com/doc/中找到更多详细信息。refman / 5.0 / en / data-type-defaults.html

其他提示

当尝试将一列转换为其中一行的值为0的auto_increment时,我也遇到了这个问题。通过设置可以临时更改0值: 通用标签 会话的

这允许将列更改为auto_increment并使用零id。

零不是理想的-而且我也不建议在auto_increment列中使用它。不幸的是,它是继承的数据集的一部分,因此我暂时仍然坚持使用它。

随后最好通过以下方式清除设置(和其他任何设置): 通用标签

尽管会在当前客户端会话结束时清除。

有关“ NO_AUTO_VALUE_ON_ZERO”设置的完整详细信息,这里

当MySQL无法确定适当的auto_increment值时会发生这种情况。在您的情况下,MySQL选择1作为下一个auto_increment值,但是表中已经存在具有该值的行。

解决此问题的一种方法是自己选择一个合适的auto_increment值: 通用标签

(请注意最后的AUTO_INCREMENT=123456。)

编辑:不完全知道该怎么产生,但是我有解决方法。

首先,像旧表一样创建一个新表: 通用标签

然后更改列 通用标签

转储新数据: 通用标签

移动表格: 通用标签

也许正在发生一些损坏,这也会解决该问题。

P.S .:作为荷兰人,我强烈建议您使用英语编码;)

我发现解决此问题的最简单方法是在更改列之前先设置表的AUTO INCREMENT值。只需确保将自动增量值设置为高于该列中当前的最大值即可: 通用标签

我在MySQL 5.7上进行了测试,对我来说非常有用。

发生这种情况是因为您的主键列已经具有值。

如错误所示...

ALTER TABLE导致自动递增重新排序,导致键“ PRIMARY”的重复条目“ 1”

这意味着您的列已经具有主键值 1 ,当您自动递增该列时,该主键值将被重新分配,从而导致重复,从而导致该错误

解决方案是删除主要约束,然后清空列。然后再次更改设置主键的表,这一次是自动递增。

我有一个类似的问题。问题是该表的记录具有类似于SystemParadox所指出的ID = 0。我通过以下步骤处理了我的问题:

步骤:

  1. 将记录id 0更新为x,其中x = MAX(id)+1
  2. 更改表以设置主键和自动增量设置
  3. 将种子值设置为x+1
  4. 将记录idx更改回0

    代码示例: 通用标签

如果MyISAM表具有组合的AUTO_INCREMENT PRIMARY KEY并尝试组合键,也会发生此错误

例如 通用标签

如果该表是相对新的,只有几条记录,则可以截断该表以重置ID值: 通用标签

使用删除不会重置 ID值。 通用标签

清空表格后,您可以应用自动增量。 通用标签

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top