2014-01-28 60 views
1

我正試圖創建一個家庭結構,標記葉節點。我有一個Trigger紀念family的葉子,但是當我嘗試保存記錄以下錯誤發生:MySQL錯誤#1442。如何避免它

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和我的結構是hieralchic所以沒有一個循環。此外,我檢查是否值爲'F',我試圖將其更改爲'T',因此,如果我與父項發生錯誤,它只會更新同一行一次。

有什麼辦法可以避免這個錯誤?

回答

1

沒有解決方案,因爲這是MySQL的限制。在documentation他們說這是他們的限制之一是:

存儲函數或觸發器不能修改表已被使用(讀或寫)由調用 函數的聲明 或觸發。

所以,恐怕解決的辦法是在我的編程語言更新行把標記