在 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
., CONSTRAINTFK_lead_appointment_CancellationID
FOREIGN KEY (CancellationID
) REFERENCESlead_appointment_cancellation
(`)
我已经检查过here
但表中没有数据。
【问题讨论】:
当你说没有数据时——你是指appointment_cancellation
表吗?
【参考方案1】:
您不能对包含父表中不存在的预先存在数据的列应用外键约束。
如果您运行以下命令来填充约会取消表,您应该能够在之后应用外键:
INSERT INTO appointment_cancellation
SELECT DISTINCT a.CancellationID
FROM appointment
【讨论】:
可能我理解的不正确;约会取消表是数据库的新增内容(并且没有记录)。在约会表中,CancellationID 的所有值都为空(默认)。 @SnOrfus:appointment_cancellation
中必须存在一条记录,即使值为 null - 这就是外键约束。它确保子级中唯一可以存在的值已经存在于父级中。【参考方案2】:
这两个字段 - appointment
.CancellationID
和 appointment_cancellation
.ID
- 需要是完全相同的类型。如果一个是 INT 而另一个是 INT UNSIGNED,你会得到这个错误。
【讨论】:
感谢您的意见,这是我检查的第一件事(过去曾发生过这种情况)。以上是关于在 MySQL 中创建外键会产生错误:的主要内容,如果未能解决你的问题,请参考以下文章