ホームページ >データベース >mysql チュートリアル >トリガーエラーなしで挿入後に同じテーブルを更新するにはどうすればよいですか?
挿入後の同じテーブルの更新のトリガー: 代替アプローチ
問題の概要
あなたACCOUNTS テーブルに、同じテーブル内の列を更新するトリガーを実装しようとします。新しく挿入された行の edit_on 値。ただし、テーブルを呼び出したトリガー内で同じテーブルを更新することに対する制限により、エラーが発生します。
代替回避策: ストアド プロシージャ
この制限を回避するには、次のようにします。ストアド プロシージャを使用すると、単一トランザクション内で挿入操作と更新操作の両方を実行できます。このアプローチにより、変更を手動でコミットして、必要な更新を有効にすることができます。
ストアド プロシージャの実装
これは、目的を達成するストアド プロシージャの例です。目的:
DELIMITER $$ CREATE PROCEDURE InsertAndEditStatus(IN new_pk BIGINT) BEGIN -- Insert new row into ACCOUNTS INSERT INTO ACCOUNTS (pk, user_id, edit_on, status) VALUES (new_pk, /* user_id */, NULL, 'A'); -- Update existing row in ACCOUNTS UPDATE ACCOUNTS SET status='E' WHERE pk = NEW.edit_on; -- Commit transaction COMMIT; END$$ DELIMITER ;
使用法
このストアド プロシージャを使用するには、新しく挿入された行の主キーを引数として呼び出します:
CALL InsertAndEditStatus(2147483726);
このプロシージャは、指定された主キーとデフォルト値を持つ新しい行を挿入し、新しい行の edit_on 列によって参照される既存の行を更新します。編集されたことを示す行を挿入しました。
以上がトリガーエラーなしで挿入後に同じテーブルを更新するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。