MySQL のトリガーとテーブル更新
トリガーを使用した INSERT 操作の後に同じテーブルを更新しようとすると、ユーザーはエラーが発生する場合があります「テーブル ACCOUNTS を更新できません...このトリガーを呼び出したステートメントによってすでに使用されています。」この制限は、トリガー ステートメントによって現在使用されているテーブルの変更に対する制限に起因します。
この問題を回避するには、トリガーのみに依存することはできません。代わりに、単一トランザクション内で INSERT アクションと更新アクションの両方を処理するストアド プロシージャを作成する必要があります。ストアド プロシージャを使用して変更を手動でコミットすると、ユーザーはトリガーによって課せられる制約を回避できます。
ストアド プロシージャの回避策を実装する手順:
CREATE PROCEDURE update_accounts_status(IN new_account_pk BIGINT) AS BEGIN -- Insert new account INSERT INTO ACCOUNTS (user_id, edit_on, status) VALUES (?, ?, 'A'); -- Update old account UPDATE ACCOUNTS SET status = 'E' WHERE pk = ?; -- Commit changes COMMIT; END
トリガーを使用する代わりに、ストアド プロシージャはACCOUNTS テーブルへの INSERT 時に呼び出されます。これにより、挿入アクションと更新アクションの両方が単一トランザクション内で正常に実行され、コミットされることが保証されます。
ストアド プロシージャを使用する利点:
以上がINSERT トリガー後にエラーなしで MySQL テーブルを更新するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。