【问题标题】:Creating a foreign key in MySQL produces error:在 MySQL 中创建外键会产生错误:
【发布时间】: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 表吗?

标签: sql mysql foreign-keys mysql-error-1452


【解决方案1】:

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

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

INSERT INTO appointment_cancellation
SELECT DISTINCT a.CancellationID
  FROM appointment

【讨论】:

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

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

【讨论】:

  • 感谢您的意见,这是我检查的第一件事(过去曾发生过这种情况)。
猜你喜欢
  • 2012-03-20
  • 1970-01-01
  • 2020-12-30
  • 2017-01-22
  • 2021-01-14
  • 1970-01-01
  • 2015-01-18
  • 1970-01-01
相关资源
最近更新 更多