MySQL:更改表以设置外键

时间:2015-03-04 16:19:28

标签: mysql foreign-keys relational-database

虽然关于这个问题有一些类似的问题,但我无法找到问题的正确答案。我有两个名为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)

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

1 个答案:

答案 0 :(得分:1)

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

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

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

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