由于级联触发器更新该行,该行未被删除

2024-04-21

我在删除表中的行时遇到问题,该表具有调用第二个表的触发器的触发器,该触发器更新第一个表中的行。这是描述:

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 中连接的行,但保留表 A 中被删除的行。

你对此有答案吗?我怀疑 pgsql 不允许更新触发器中删除的行,但我在 pgsql 文档中没有找到任何有关它的信息。 解决办法是什么?


我也遇到了类似的问题,但是只有一张桌子。从给定表中删除行会触发一个触发器(在删除之前),该触发器在同一个表中搜索相关行(根据给定条件),如果找到它们,这些行就会被更新。现在,如果要通过同一删除命令删除更新的行,则它不会被删除。

所以基本上,如果您创建一个触发器,它总是更新正在删除的同一行,那么从现在起您将无法删除任何内容。

我不知道这是故意的还是无意的。从一方面来看,这似乎是合乎逻辑的,这是肯定的。如果您更新记录,则该记录与要删除的记录不同。

(抱歉英语不好)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

由于级联触发器更新该行,该行未被删除 的相关文章

随机推荐