MySQL错误#1442。如何避免它

时间:2014-01-28 12:29:29

标签: mysql

我正在尝试创建一个家族的hieralchical结构,标记叶节点。我有一个Triggerfamily标记为叶子,但是当我尝试保存记录时,会发生以下错误:

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',因此,如果我与父项有误,它只会更新同一行一次。

有没有办法避免这个错误?

1 个答案:

答案 0 :(得分:1)

没有解决方案,因为这是对MySQL的限制。在 documentation 中,他们说这是他们的限制之一:

  

存储的函数或触发器无法修改已经存在的表   被调用的语句用于(读或写)   功能或触发器。

所以,我担心解决方案是通过更新编程语言中的行来标记