ホームページ >データベース >mysql チュートリアル >複数の行を挿入するときに MySQL トリガーでの重複更新を防ぐ方法

複数の行を挿入するときに MySQL トリガーでの重複更新を防ぐ方法

Barbara Streisand
Barbara Streisandオリジナル
2024-11-29 06:38:13569ブラウズ

How to Prevent Duplicate Updates in a MySQL Trigger When Inserting Multiple Rows?

挿入時に別のテーブルの列を更新する MySQL トリガー

リレーショナル データベース システムでは、操作を自動的に実行する必要が生じる場合があります。あるテーブルで、別の関連テーブルで変更が発生したとき。ここでトリガーが役に立ちます。この特定のインスタンスでは、OccupiedRoom テーブルに新しい行が挿入されたときに BookingRequest テーブルの列を更新するトリガーを MySQL に作成することを目的としています。

あなたが提示したトリガーは、 OccupiedRoom テーブルに行を挿入した直後の BookingRequest テーブル。ただし、このアプローチの問題は、トリガーが OccupiedRoom テーブルに挿入された行ごとに実行されるように定義されていることです。つまり、複数の行が同時に挿入された場合、トリガーが複数回実行されることになります。これにより、不正確または一貫性のないデータ更新が発生する可能性があります。

この問題を解決するには、対応する行がすでに存在する場合に BookingRequest テーブルのステータス列のみを更新するようにトリガーを変更する必要があります。トリガーの改訂版は次のとおりです。

DELIMITER $$
CREATE TRIGGER occupy_trig
AFTER INSERT ON `OccupiedRoom` FOR EACH ROW
begin
  DECLARE id_exists Boolean;
  -- Check BookingRequest table
  SELECT 1
  INTO @id_exists
  FROM BookingRequest
  WHERE BookingRequest.idRequest= NEW.idRequest;

  IF @id_exists = 1
  THEN
    UPDATE BookingRequest
    SET status = '1'
    WHERE idRequest = NEW.idRequest;
  END IF;
END;
$$
DELIMITER ;

このトリガーはサブクエリを利用して、idRequest 列に基づいて BookingRequest テーブルに対応する行が存在するかどうかを確認します。一致する行が見つかった場合、トリガーはステータス列を「1」に更新します。このチェックを組み込むことで、トリガーが BookingRequest テーブル内の関連する行のみを更新し、誤った更新や重複した更新の可能性を排除します。

以上が複数の行を挿入するときに MySQL トリガーでの重複更新を防ぐ方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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