3

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

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 - 触发器后不允许更新新行

4

1 回答 1

10

那是对的。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 insert 触发器在数据更新后运行。因此,如果要更新同一行,请使用before触发器。

您的子查询看起来很可疑,因为它不相关new并且看起来它可能返回不止一行。

于 2015-09-17T11:30:18.417 回答