我正在尝试创建一个家族的hieralchical结构,标记叶节点。我有一个Trigger
将family
标记为叶子,但是当我尝试保存记录时,会发生以下错误:
Error Code: 1442. Can't update table 'family' in stored function/trigger because it is already used by statement which invoked this stored function/trigger.
我的触发器是:
CREATE TRIGGER MARK_LEAF BEFORE INSERT ON FAMILY FOR EACH ROW
BEGIN
DECLARE V_IS_LEAF CHAR(1);
SELECT IS_LEAF INTO V_IS_LEAF FROM FAMILY WHERE ID = NEW.PARENT_ID;
IF (V_IS_LEAF = 'F') THEN
UPDATE FAMILY SET IS_LEAF = 'T' WHERE ID = NEW.PARENT_ID;
END IF;
END
注意: family
字段为ID, PARENT_ID, IS_LEAF
注2:请注意,我总是更新parent_id
并且我的结构是一般的,因此没有循环。此外,我检查值是否为'F'
,并尝试将其更改为'T'
,因此,如果我与父项有误,它只会更新同一行一次。
有没有办法避免这个错误?
答案 0 :(得分:1)
没有解决方案,因为这是对MySQL的限制。在 documentation 中,他们说这是他们的限制之一:
存储的函数或触发器无法修改已经存在的表 被调用的语句用于(读或写) 功能或触发器。
所以,我担心解决方案是通过更新编程语言中的行来标记