如果sql失败了怎么能在sql中删除我的子行呢?

时间:2016-05-16 21:57:20

标签: mysql

当我执行下一个SQL代码时:

delete from product where idproduct = 2;

我收到了下一个错误:

Error Code: 1451. Cannot delete or update a parent row: a foreign key constraint fails (`store`.`sale_detail`, CONSTRAINT `fk_sale_detail_product1` FOREIGN KEY (`idproduct`) REFERENCES `product` (`idproduct`) ON DELETE NO ACTION ON UPDATE NO ACTION)

当我尝试删除我的表中的孩子不想要的时候,但是我只是想删除没有删除品牌的产品行..

2 个答案:

答案 0 :(得分:0)

您不能违反Referencial Integrity Constraint规则。您应该选择级联选项ON DELETE CASCADE

  1. 您需要先删除子行,然后删除父行。

  2. 您可以暂时禁用FK检查SET FOREIGN_KEY_CHECKS=0;并在删除后启用它们。

  3. 删除所有FK约束,执行delete,然后再次重新创建FK约束。

  4. 最佳选择:通过在表格中添加Status列来进行软删除,只需将该列更新为Deleted

答案 1 :(得分:0)

您在idproduct列的store.sale_detail表中有一个外键约束。因此,如果您要删除产品,则需要确保在sale_detail表中未引用该产品。

另一个解决方案是修改您的外键,这样当您删除product表上的行时,sale_detail上的引用行在相应列上变为NULL。实际上你有:

ON DELETE NO ACTION

但你可以:

ON DELETE SET NULL

此外,您可以强制删除sale_detail表上的所有引用:

ON DELETE CASCADE

希望它有所帮助。