MySQL: 修改 table 设置外键

MySQL: Alter table to set Foreign key

虽然关于这个主题有一些类似的问题,但我找不到适合我的问题的正确答案。我有 2 个表,名为 customercar。我想要做的是:当我从数据库中删除一个客户时,我希望属于该客户的汽车也将被自动删除。 MySQL Workbench 为我生成的代码是这样的:

ALTER TABLE `autocare`.`car` 
ADD CONSTRAINT `customerId`
FOREIGN KEY (`CUSTOMER_ID`)
REFERENCES `autocare`.`customer` (`ID`)
ON DELETE CASCADE
ON UPDATE RESTRICT;

我得到这个错误:

ERROR 1452: Cannot add or update a child row: a foreign key constraint fails
(`autocare`.`#sql-80c_388`, CONSTRAINT `customerId` FOREIGN KEY (`CUSTOMER_ID`)
REFERENCES `customer` (`ID`) ON DELETE CASCADE)

之前这些表之间没有关系。有任何想法吗?提前致谢!

您的最终目标是实现从 customercar 的级联删除。当您尝试按现在的 table 添加约束时,它会失败,因为 car table 必须包含具有当前不存在的 CUSTOMER_ID 值的行在父 customer table 中。

您应该首先找到那些孤立的行并将它们删除(因为您的目标是无论如何都要删除它们)。您可以通过以下查询找到它们:

SELECT *
FROM car
WHERE
 CUSTOMER_ID NOT IN (SELECT ID FROM customer)

删除孤立记录后,剩余的现有行可以满足外键约束,您的 ALTER TABLE 语句将成功。