2014-01-28 3 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, и моя структура является иерархической al, поэтому нет цикла. Кроме того, я проверяю, является ли значение 'F', и я пытаюсь изменить его на 'T', поэтому, если я допустил ошибку с родителем, он обновляет одну и ту же строку один раз.

Есть ли способ избежать этой ошибки?

ответ

1

Решение отсутствует, поскольку это ограничение MySQL. В documentation они говорят, что это одна из их ограничений является:

Хранимая функция или триггер не может изменить таблицу, которая уже используется (для чтения или записи) с помощью заявления, вызвавшей функцию или триггер.

Так что, я боюсь, что решение поставить отметку путем обновления строк на моем языке программирования

Смежные вопросы