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