【发布时间】:2011-04-13 18:52:27
【问题描述】:
我在删除具有触发器的表中的行时遇到问题,该触发器调用第二个表的触发器,该触发器会更新第一个表中的行。这是描述:
Table A (id,b_table_count)
Table B (id,a_table_id_fk)
表 A 有触发器 BEFORE DELETE,其中有指令:
BEGIN
DELETE FROM b where a_table_fk = OLD.id;
RETURN OLD;
END;
表 B 有触发器 AFTER DELETE 指令:
UPDATE a SET b_table_count = b_table_count-1 WHERE OLD.a_table_id_fk = a.id;
当我从表 A 中删除行时,B 中没有连接的行,一切都是正确的。
但是,当我从表 A 中删除行时,该行已连接表 B 中的行,然后 DELETE 语句返回“查询成功返回:0 行受影响”。我必须第二次执行 DELETE 语句,然后最终删除行。在第一次 DELTE 之后,表 B 中只删除了连接的 ROWS,但表 A 中正在删除的行仍然存在。
你有答案吗?我怀疑 pgsql 不允许更新触发器中被删除的行,但我在 pgsql 文档中没有找到任何关于它的信息。 解决办法是什么?
【问题讨论】:
-
为什么不使用
ON DELETE CASCADE而不是第一个触发器?
标签: sql postgresql triggers cascade sql-delete