MySql 不能使列 auto_increment

新手上路,请多包涵

我有一个包含 4 列的“Bestelling”表:“Id”(PK)、“KlantId”、“Datum”、“BestellingsTypeId”,现在我想将列 ID 设为 auto_increment,但是,当我尝试这样做时,我得到这个错误:

 ERROR 1062: ALTER TABLE causes auto_increment resequencing, resulting in duplicate entry '1' for key 'PRIMARY'

SQL Statement:

ALTER TABLE `aafest`.`aafest_bestelling` CHANGE COLUMN `Id` `Id` INT(11) NOT NULL AUTO_INCREMENT

ERROR: Error when running failback script. Details follow.

ERROR 1046: No database selected

SQL Statement:

CREATE TABLE `aafest_bestelling` (

  `Id` int(11) NOT NULL,

  `KlantId` int(11) DEFAULT NULL,

  `Datum` date DEFAULT NULL,

  `BestellingstypeId` int(11) DEFAULT NULL,

  PRIMARY KEY (`Id`)

) ENGINE=InnoDB DEFAULT CHARSET=latin1

有人有想法吗?

原文由 Sander Declerck 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 918
2 个回答

如果表包含 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 找到。

原文由 SystemParadox 发布,翻译遵循 CC BY-SA 3.0 许可协议

如果 您尝试修改的列包含在另一个表的外键关系中(尽管它不会产生问题中提到的错误消息),也会发生无法将现有列设置为 auto_increment 的情况。

(我添加了这个答案,即使它与问题正文中的特定错误消息无关,因为这是在搜索与无法设置现有 MySQL 相关的问题时出现在 Google 上的第一个结果列到 auto_increment。)

原文由 Ossolox 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题