在 MySQL 中创建外键会产生错误:

Posted

技术标签:

【中文标题】在 MySQL 中创建外键会产生错误:【英文标题】:Creating a foreign key in MySQL produces error: 【发布时间】:2011-03-01 09:48:35 【问题描述】:

我正在尝试在 mysql 中的表上创建外键,但我遇到了一个奇怪的错误,在我的任何搜索中似乎都没有多少信息。

我正在用这个创建密钥(从 mysql workbench 5.2 发出):

ALTER TABLE `db`.`appointment` 
  ADD CONSTRAINT `FK_appointment_CancellationID`
  FOREIGN KEY (`CancellationID` ) REFERENCES `db`.`appointment_cancellation` (`ID` )
  ON DELETE NO ACTION
  ON UPDATE NO ACTION
, ADD INDEX `FK_appointment_CancellationID` (`CancellationID` ASC) ;

此时我得到了错误:

错误 1452:无法添加或更新子行:外键约束失败 (alarmtekcore., CONSTRAINT FK_lead_appointment_CancellationID FOREIGN KEY (CancellationID) REFERENCES lead_appointment_cancellation (`)

我已经检查过here

但表中没有数据。

【问题讨论】:

当你说没有数据时——你是指appointment_cancellation 表吗? 【参考方案1】:

您不能对包含父表中不存在的预先存在数据的列应用外键约束。

如果您运行以下命令来填充约会取消表,您应该能够在之后应用外键:

INSERT INTO appointment_cancellation
SELECT DISTINCT a.CancellationID
  FROM appointment

【讨论】:

可能我理解的不正确;约会取消表是数据库的新增内容(并且没有记录)。在约会表中,CancellationID 的所有值都为空(默认)。 @SnOrfus:appointment_cancellation 中必须存在一条记录,即使值为 null - 这就是外键约束。它确保子级中唯一可以存在的值已经存在于父级中。【参考方案2】:

这两个字段 - appointment.CancellationIDappointment_cancellation.ID - 需要是完全相同的类型。如果一个是 INT 而另一个是 INT UNSIGNED,你会得到这个错误。

【讨论】:

感谢您的意见,这是我检查的第一件事(过去曾发生过这种情况)。

以上是关于在 MySQL 中创建外键会产生错误:的主要内容,如果未能解决你的问题,请参考以下文章

无法在 MySQL Workbench 中创建外键

SQL中创建外键约束

在交叉引用表中创建具有两个外键的 MySQL 表

无法在PhpStorm中创建外键

在SQL Server 中创建外键

mysql外键创建失败原因