【发布时间】:2015-03-04 16:19:27
【问题描述】:
虽然有一些关于该主题的类似问题,但我找不到我的问题的正确答案。我有 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)
以前这些表之间没有关系。有任何想法吗?提前致谢!
【问题讨论】:
-
问题可能是存在一个
car.CUSTOMER_ID,它在customer.ID中没有匹配的父行。当您尝试添加键约束时,与现有父项不匹配的行会导致约束失败。 -
用
SELECT * FROM car WHERE CUSTOMER_ID NOT IN (SELECT ID FROM customer)之类的东西找到他们 -
我明白了。有什么简单的方法可以重置两个表中的所有记录 ID 号吗?我在两个表中都有 50 行。
-
你不能修改
customer.ID而不破坏子表中的现有关系。如果您的目标是级联删除,请先识别car中的孤立记录并删除它们,然后添加 FK 约束。 -
我明白了!如果您回答问题,我可以将其标记为正确答案。感谢您的帮助@MichaelBerkowski
标签: mysql foreign-keys relational-database