ホームページ >データベース >mysql チュートリアル >MySQL が CHECK 制約をサポートしないのはなぜですか? 代替手段は何ですか?

MySQL が CHECK 制約をサポートしないのはなぜですか? 代替手段は何ですか?

Patricia Arquette
Patricia Arquetteオリジナル
2025-01-04 20:24:41383ブラウズ

Why Doesn't MySQL Support CHECK Constraints, and What Are the Alternatives?

MySQL へのカスタム CHECK 制約の追加

MySQL テーブルにカスタム CHECK 制約を追加しようとすると、問題が発生する場合があります。指定された条件に基づいてカラムに入力できる値を制限するこれらの制約は、MySQL ではネイティブにサポートされていません。

ステータス カラムに CHECK 制約を適用しようとする、提供されたコードを考えてみましょう。値 'a'、'd'、および 'u' のみを許可します:

CREATE TABLE `Participants` (
  ...
  CONSTRAINT `participants_ibfk_2` CHECK (status IN ('a','d','u'))
  ...
);

ただし、このコードを MySQL で実行すると、次のことがわかります。 CHECK 制約は無視されます。これは、MySQL マニュアルに記載されているように、テーブル定義で定義された CHECK 句が MySQL ストレージ エンジンでサポートされていないためです。

したがって、MySQL では CHECK 制約を定義できますが、これらの制約はに入力されるデータにいかなる制限も課さないでください。 table.

回避策

データの整合性を強制し、意図したとおりに列値を制限するには、次の回避策を検討できます。

  • トリガーの使用: MySQL トリガーを使用してカスタム CHECK を実装できます。制約。ただし、トリガーには慎重な検討と管理が必要で、データベースのパフォーマンスに影響を与える可能性があります。
  • PostgreSQL への移行: もう 1 つのオープンソース RDBMS である PostgreSQL は、CHECK 制約を完全にサポートし、より堅牢なソリューションを提供します。データの整合性を強化するため。このレベルの制約がアプリケーションにとって重要である場合、PostgreSQL への移行を検討することも選択肢の 1 つとなる可能性があります。

以上がMySQL が CHECK 制約をサポートしないのはなぜですか? 代替手段は何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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