触发后不允许更新NEW行

时间:2015-09-17 11:20:38

标签: mysql triggers runtime-error insertafter

为什么使用此触发器会出错?

 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 - 触发后

不允许更新NEW行

1 个答案:

答案 0 :(得分:8)

这是正确的。如果要修改数据,则需要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

根据名称的建议, AFTER 插入触发器在数据更新后运行。因此,如果要更新同一行,请在触发器之前使用

您的子查询看起来很可疑,因为它与new无关,看起来它可能会返回多行。