トリガーでこれをすべて行うことはできないようです。 ドキュメント によると :
ストアド関数またはトリガー内で、関数またはトリガーを呼び出したステートメントによって(読み取りまたは書き込みのために)すでに使用されているテーブルを変更することは許可されていません。
この回答 、次のようにする必要があります:
ターゲットテーブルに挿入/更新してから、他の行をすべてトランザクションで更新するストアドプロシージャを作成します。
ストアドプロシージャを使用して、変更を手動でコミットします(挿入と更新)。 MySQLでこれを行ったことはありませんが、この投稿 良い例のようです。