MySQL でのトリガーによる挿入と更新の防止
MySQL にはチェック制約を強制する機能がないため、防止するための代替方法を検討する必要があります。不正なデータ変更。
foo テーブルの Agency 属性で説明されているシナリオを考えてみましょう。 1 から 5 までの値のみを取ることができます。
コード スニペットの例に示すように、トリガーを使用して、この制約に違反する挿入または更新をインターセプトすることもできます。ただし、(#Do nothing? で示されるように) if 条件の後のステートメントを単に省略しても、操作の実行は防止されません。
SIGNAL Keyword to the Rescue
MySQL SIGNAL 構文が解決策を提供します。これにより、カスタム エラーを発生させ、意味のあるエラー メッセージを提供することができます。トリガーの改良版は次のとおりです。
create trigger agency_check before insert on foo for each row begin if (new.agency < 1 or new.agency >5) then SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'Agency must be between 1 and 5'; end if end
このトリガーは、無効なエージェンシー値を持つ行を挿入または更新しようとすると、指定されたメッセージでエラーを発生させるようになりました。エラーは MySQL クライアントによってインターセプトされ、ユーザーに表示されます。
結論
トリガー内で SIGNAL キーワードを利用することで、MySQL のチェックの欠如を効果的に克服します。制約を適用し、不正なデータ操作を防止するメカニズムを提供します。このアプローチにより、データの整合性が確保され、無効なデータが foo テーブルに追加または変更されるのを防ぎます。
以上がチェック制約が利用できない場合、MySQL でデータの整合性を強制するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。