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

MySQL は CHECK 制約をサポートしていますか? サポートしていない場合、代替手段は何ですか?

Susan Sarandon
Susan Sarandonオリジナル
2025-01-01 14:31:11654ブラウズ

Does MySQL Support CHECK Constraints, and If Not, What Are the Alternatives?

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

MySQL のドキュメントには CHECK 制約の例が含まれていますが、これらの制約は現在は適用されていないことに注意してください。エンジンに支えられています。その結果、テーブル定義でそれらを定義しても、データ値に制限は適用されません。

説明

MySQL マニュアルによると、「CHECK 句は解析されます」ただし、すべてのストレージ エンジンによって無視されます。」これは、MySQL が CHECK 制約定義をテーブルに適用せずに単純にスキップすることを意味します。

回避策

残念ながら、MySQL には CHECK を強制する直接的な方法は提供されていません。制約。ただし、考えられる回避策の 1 つは、代わりにトリガーを作成することです。トリガーは、テーブルに対する INSERT、UPDATE、DELETE 操作などの特定のイベントに応答するデータベース オブジェクトです。

たとえば、INSERT または DELETE 操作を許可する前に status 属性の値をチェックするトリガーを作成できます。 UPDATE 操作が発生します。このようなトリガーのサンプル コード スニペットは次のとおりです。

DELIMITER $$
CREATE TRIGGER participants_validate_status BEFORE INSERT OR UPDATE ON Participants
FOR EACH ROW
BEGIN
  IF NEW.status NOT IN ('a', 'd', 'u') THEN
    SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'Invalid value for status';
  END IF;
END
$$
DELIMITER ;

代替ソリューション

CHECK 制約をサポートするデータベースが必要な場合は、代替のオープンソースの使用を検討してください。 PostgreSQLなどのRDBMS。 PostgreSQL は CHECK 制約に対する強力なサポートを提供し、データの整合性を管理するための実行可能なオプションです。

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

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