MySQL: 修改 table 设置外键
MySQL: Alter table to set Foreign key
虽然关于这个主题有一些类似的问题,但我找不到适合我的问题的正确答案。我有 2 个表,名为 customer
和 car
。我想要做的是:当我从数据库中删除一个客户时,我希望属于该客户的汽车也将被自动删除。 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)
之前这些表之间没有关系。有任何想法吗?提前致谢!
您的最终目标是实现从 customer
到 car
的级联删除。当您尝试按现在的 table 添加约束时,它会失败,因为 car
table 必须包含具有当前不存在的 CUSTOMER_ID
值的行在父 customer
table 中。
您应该首先找到那些孤立的行并将它们删除(因为您的目标是无论如何都要删除它们)。您可以通过以下查询找到它们:
SELECT *
FROM car
WHERE
CUSTOMER_ID NOT IN (SELECT ID FROM customer)
删除孤立记录后,剩余的现有行可以满足外键约束,您的 ALTER TABLE
语句将成功。
虽然关于这个主题有一些类似的问题,但我找不到适合我的问题的正确答案。我有 2 个表,名为 customer
和 car
。我想要做的是:当我从数据库中删除一个客户时,我希望属于该客户的汽车也将被自动删除。 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)
之前这些表之间没有关系。有任何想法吗?提前致谢!
您的最终目标是实现从 customer
到 car
的级联删除。当您尝试按现在的 table 添加约束时,它会失败,因为 car
table 必须包含具有当前不存在的 CUSTOMER_ID
值的行在父 customer
table 中。
您应该首先找到那些孤立的行并将它们删除(因为您的目标是无论如何都要删除它们)。您可以通过以下查询找到它们:
SELECT *
FROM car
WHERE
CUSTOMER_ID NOT IN (SELECT ID FROM customer)
删除孤立记录后,剩余的现有行可以满足外键约束,您的 ALTER TABLE
语句将成功。