在应用ON DELETE约束时如何删除子表中的条目

时间:2015-09-17 14:38:27

标签: mysql

我想在现有表上应用ON DELETE约束。为此我使用此查询:

mysql> alter table table_product_varients add constraint fk_test foreign key (product_id) references table_products (product_id) on delete cascade ;

收到此错误:

错误1452(23000):无法添加或更新子行:外键约束f 苦恼的。

我理解这个错误是因为我没有table_products中的product_id,但table_product_varients有这些product_ids的变量。

我可以通过设置

来应用ON DELETE约束
SET FOREIGN_KEY_CHECKS=0 

这将应用ON DELETE约束,但在子表中不会被删除,因为父表中没有product_id(table_products)

如何应用ON DELETE约束并删除子表中的变量而没有父可用?

2 个答案:

答案 0 :(得分:1)

您必须清理表table_product_varients以获取无效引用,然后您才能添加约束

DELETE FROM table_product_varients
WHERE product_id NOT IN (SELECT product_id FROM table_products);

答案 1 :(得分:0)

//这样会在没有父母的情况下删除你的孩子

DELETE FROM TABLE_PRODUCTS
WHERE PRODUCT_VARIENT_ID NOT IN (SELECT ID FROM TABLE_PRODUCT_VARIENTS);

//在您可以申请外国钥匙之后