gpt4 book ai didi

sql - 由于级联触发器更新此行,因此未删除行

转载 作者:行者123 更新时间:2023-11-29 12:14:43 26 4
gpt4 key购买 nike

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

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 在删除指令后有触发器:

UPDATE a SET b_table_count = b_table_count-1 WHERE OLD.a_table_id_fk = a.id;  

当我从表 A 中删除行时,该行在 B 中没有连接的行,一切都是正确的。
但是,当我从表 A 中删除行时,该行已连接表 B 中的行,然后 DELETE 语句返回 "Query returned successfully: 0 rows affected"。我必须第二次执行 DELETE 语句,然后最终删除行。在第一次 DELTE 之后,只有连接的行在表 B 中被删除,但在表 A 中被删除的行仍然存在。

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

最佳答案

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

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

不知道是不是故意的。从某种意义上说,这似乎合乎逻辑,这是肯定的。如果您更新一条记录,则它与要删除的记录不同。

(抱歉英语不好)

关于sql - 由于级联触发器更新此行,因此未删除行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5654068/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com