使用触发器防止删除满足另一个表中条件的行的最佳方法?



我想创建一个触发器来防止在满足具有相同table_1ID的table_2行中的条件时删除table_1中的行(table_2.status = 'ON'(。

我不担心一次删除多行。

最好的方法是什么?

提前谢谢。

这里有一种方法:

create or replace function func_delete_table1()
returns trigger as 
$$
begin
if exists (select 1 from table2 where table1_id = old.id and status = 'ON') then
raise exception 'Cannot delete id % from table1 because the corresponding record in table2 has status ON', new.id;
end if;
end
$$ language 'plgpsql';
create trigger trg_delete_table1 before delete on table1_id
for each row execute procedure func_delete_table1();

请注意,正如 DanielG 所评论的那样,您还可以在delete语句中实现整个逻辑:

delete from table1 t1
where 
id = ?
and not exists (select 1 from table2 t2 where t2.table1id = t2.id and t2.status = 'ON')

最新更新