这样做:
delete from product
where descricao ilike '%ACC%'
我收到此错误:
对表“ product”的更新或删除违反了表“ productmoviment”上的外键约束“ fk3b140f7bc8c91aae”
我需要查询continue并执行所有行,删除不存在的行,因为如果单个行具有外键,则根本不执行其他任何行
谢谢
答案 0 :(得分:0)
要删除此内容,您必须使用ON DELETE CASCADE.
CASCADE
定义为删除引用行时,它也会自动删除引用行
但是还有另一种方法 您必须先删除一个外键,然后再删除父表
delete from childtable
where id_parent = 1;-- child table
DELETE FROM parent
WHERE id_parent = 1; --parent table
答案 1 :(得分:0)
我认为这类似于一次性清理操作:否则,您必须确保正确定义了外键。
您可以使用匿名存储过程来做到这一点。
假设:
DO $$
DECLARE
pr product%rowtype;
BEGIN
FOR pr IN
select * from product
where descricao ilike '%ACC%'
LOOP
RAISE NOTICE 'trying to delete product id %',pr.id;
BEGIN
DELETE FROM product WHERE id=pr.id;
RAISE NOTICE
'Deleted product id: %',pr.id;
EXCEPTION
WHEN others THEN
-- we ignore the error
END;
END LOOP;
END $$;
基本上,对与WHERE子句匹配的所有产品(描述为'%ACC%')进行迭代,并尝试一次删除它们,而忽略由于外键而无法删除的产品的错误。