通过id级联删除所有表中的产品和删除

问题描述 投票:0回答:1

我有一个产品表。我删除了产品,我也想从浮动中删除此产品,从表中删除喜欢的内容,以及从评论表中删除。

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;

事实是产品表与表的主键相关联。如何集成这些查询并执行级联删除?

sql postgresql
1个回答
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选项可能对您更有用。

© www.soinside.com 2019 - 2024. All rights reserved.