エラー処理を備えた MySQL トリガーを使用したテーブル更新の防止
MySQL は、トリガーを通じてデータの整合性とビジネス ルールを強制する強力なメカニズムを提供します。重要なシナリオの 1 つは、テーブルに対する無許可または無効な更新を防止することです。この記事では、MySQL トリガーを利用してエラーをスローし、そのような更新を防止する方法を説明します。
トリガーでのエラーのスロー
MySQL 5.5 では、開発者は SIGNAL 構文で以下をスローできます。トリガー内の例外。 SIGNAL ステートメントは 2 つのパラメーターを取ります:
SIGNAL sqlstate SET message_text = 'Error Message';
ここで、sqlstate は例外の種類を指定し、message_text はカスタム エラー メッセージを定義します。例外タイプは、該当するエラー状態を表す 5 桁のコードである必要があります。
エラー処理用のカスタム トリガーの作成
次の例を考えてみましょう。特定の列の新しい値が負の場合にテーブルを更新します。これを実現するには、次のように更新操作の前にトリガーを作成します。
CREATE TRIGGER trg_before_update BEFORE UPDATE ON my_table FOR EACH ROW BEGIN DECLARE msg VARCHAR(128); IF NEW.column_name < 0 THEN SET msg = CONCAT('MyTriggerError: Negative value in column_name: ', CAST(NEW.column_name AS CHAR)); SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = msg; END IF; END
トリガーは、column_name 列の新しい値が負であるかどうかを確認します。存在する場合、カスタム エラー メッセージを作成し、SIGNAL ステートメントを使用して例外をスローします。 45000 SQLSTATE は、未処理のユーザー定義例外を表します。
トリガーのテスト
次のステートメントを実行してトリガーをテストします。
-- Insert valid and invalid data: INSERT INTO my_table (column_name) VALUES (1), (-1), (2); -- Display the table contents: SELECT * FROM my_table; -- Attempt to insert invalid data: INSERT INTO my_table (column_name) VALUES (-1);
最初の INSERT ステートメントは、1 つの行に負の値が含まれているため失敗し、トリガー。トリガーが負の値による更新を防ぐため、後続の INSERT ステートメントも失敗します。
以上がMySQL トリガーはテーブルの更新を防ぎ、エラーをどのように処理できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。