如果表Child B中的记录存在,如何防止删除表Child A中的记录。
Child A和Child B引用相同的父记录。
我正在使用PostgreSQL 9.4。
答案 0 :(得分:0)
如果表Child A中的相应记录不存在,是否禁止在表Child B中有记录。 (这与你上面所说的完全相同,虽然它暗示了上面的陈述。)如果是这种情况,你在Child A和Child B之间有一个外键关系。将外键设置为约束并根据需要应用指数。
答案 1 :(得分:-1)
如果我理解您要求的内容,如果父表中存在与同一父级关联的child_b记录,则您不想删除child_a中的任何记录。
如果是这样,这应该有用(虽然如果child_b中有很多记录,效率不高):
delete from child_a where id = 1234 and parent_id not in (select parent_id from child_b)
答案 2 :(得分:-1)
我通过在表子A上创建触发器来解决这个问题。
创建或替换函数check_ChildB()RETURNS触发器AS $ check_ChildB $ DECLARE childB_Exists BIGINT; BEGIN
SELECT ChildB.id FROM ChildB
WHERE OLD.parent_id = ChildB.parent_id INTO childB_Exists;
IF childB_Exists IS NOT NULL THEN
RAISE EXCEPTION 'ERROR!!!';
END IF;
RETURN OLD;
END;
$check_ChildB$ LANGUAGE plpgsql;
在ChildA上删除之前创建TRIGGER delete_ChildA 对于每行执行程序check_ChildB();