如果另一个表

时间:2016-08-12 21:03:44

标签: database postgresql validation

如果表Child B中的记录存在,如何防止删除表Child A中的记录。

Child A和Child B引用相同的父记录。

我正在使用PostgreSQL 9.4。

enter image description here

3 个答案:

答案 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();