我有一个产品表。我要删除产品,我也想从浮动广告中删除此产品,从表格和评论表格中删除喜欢的内容。
DELETE FROM COMMENTS WHERE PRODUCT_ID = 1;
DELETE FROM LIKES_PRODUCTS WHERE PRODUCT_ID = 1;
DELETE FROM BOOKMARKS_PRODUCTS WHERE PRODUCT_ID = 1;
DELETE FROM PRODUCTS WHERE PRODUCT_ID = 1;
事实是产品表与该表的主键相关联。如何整合这些查询并执行级联删除?
答案 0 :(得分:2)
您可以将级联删除约束添加到其他表。例如,在COMMENTS
表上尝试以下操作:
ALTER TABLE COMMENTS ADD FOREIGN KEY(id_fk) REFERENCES PRODUCTS (PRODUCT_ID)
ON DELETE CASCADE;
重要的是,在尝试之前,请在 之前添加此约束:
DELETE FROM PRODUCTS WHERE PRODUCT_ID = 1;
这样做的原因是,如果您删除PRODUCTS
表中的父记录,然后尝试将约束添加到子表中,则会出现错误。发生此错误的原因是,现在有子记录指向父记录不再存在。如果您确实遇到了这种情况,则可以通过从其他表中手动删除子记录来解决此问题。
有了此约束,删除PRODUCT_ID = 1
表中的PRODUCTS
也将导致COMMENTS
表中所有匹配的记录也被删除。
还可以使用具有外部约束的CREATE TABLE
语句来定义表。但是,由于您的表已经存在,因此我上面给出的ALTER TABLE
选项可能对您更有用。