2015-09-17 1 views
0

Почему я получаю сообщение об ошибке с помощью этого триггера?Обновление новой строки не допускается после запуска триггера

create TRIGGER save_Assignee AFTER INSERT ON changeitem 
    FOR EACH ROW 
    BEGIN 
    SET new.assignee=(select assignee from jiraissue INNER JOIN changegroup ON jiraissue.ID=changegroup.issueid) 
    END 

сообщение об ошибке:

# 1362 - Обновление новой строки не допускается после запуска

ответ

3

Это правильно. Вам нужен before insert триггер, если вы хотите изменить данные:

create TRIGGER save_Assignee BEFORE INSERT ON changeitem FOR EACH ROW 
BEGIN 
    SET new.assignee = (select assignee 
         from jiraissue INNER JOIN 
          changegroup 
          ON jiraissue.ID = changegroup.issueid 
         ) 
END 

Как предполагает название, ПОСЛЕ вставки триггер запуска после были обновлены данные. Итак, если вы хотите обновить ту же строку, используйте до триггера.

Ваш подзапрос выглядит подозрительным, потому что он не коррелирует с new, и похоже, что он может возвращать более одной строки.

+0

Аналогично: http://stackoverflow.com/questions/17823457/update-same-row-after-update-in-trigger –