挿入時に別のテーブルの列を更新する 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 サイトの他の関連記事を参照してください。