我有一个产品表。我删除了产品,我也想从浮动中删除此产品,从表中删除喜欢的内容,以及从评论表中删除。
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;
事实是产品表与表的主键相关联。如何集成这些查询并执行级联删除?
您可以向其他表添加级联删除约束。例如,在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
选项可能对您更有用。