チェック制約が利用できない場合、MySQL でデータの整合性を強制するにはどうすればよいですか?

Patricia Arquette
リリース: 2024-11-27 02:01:11
オリジナル
367 人が閲覧しました

How Can You Enforce Data Integrity in MySQL When Check Constraints Are Not Available?

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

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート