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 - NEW 行の更新は after トリガーでは許可されていません

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挿入トリガーは、データが更新された後に実行されます。したがって、同じ行を更新する場合は、beforeトリガーを使用します。

サブクエリは、相関関係がなくnew、複数の行を返す可能性があるため、疑わしいように見えます。

于 2015-09-17T11:30:18.417 に答える