ホームページ >データベース >mysql チュートリアル >トリガーエラーなしで挿入後に同じテーブルを更新するにはどうすればよいですか?

トリガーエラーなしで挿入後に同じテーブルを更新するにはどうすればよいですか?

Barbara Streisand
Barbara Streisandオリジナル
2024-12-10 22:22:10752ブラウズ

How Can I Update the Same Table After an Insert Without Trigger Errors?

挿入後の同じテーブルの更新のトリガー: 代替アプローチ

問題の概要

あなた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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。