ホームページ >データベース >mysql チュートリアル >MySQL CHECK 制約が機能しないのはなぜですか?
MySQL の CHECK 制約の動作を理解する
MySQL による CHECK 制約の処理は、予期しない場合があります。 CHECK 制約は、正しく定義されている場合でも、非アクティブに見える場合があります。 重要なのは、MySQL バージョンの互換性を理解することです。
MySQL 8.0.16 は、CHECK 制約を完全にサポートした最初のバージョンです。 MySQL バージョンが 8.0.16 より古い場合、CHECK
句は解析されますが、すべてのストレージ エンジンによって無視されます。 制約に違反するデータはエラーなしで挿入されます。
MySQL バージョンの機能を確認するには、公式 MySQL リファレンス マニュアル (https://www.php.cn/link/e6c19a87ef9e816e02ce247d4f41d38a) を参照してください。
CHECK 制約の代替 (古い MySQL バージョンの場合):
MySQL バージョンに CHECK 制約がサポートされていない場合は、トリガーの使用を検討してください。トリガーは、行挿入などのデータベース イベントに応答してカスタム コードを実行します。 トリガーは挿入前にデータを検証し、データの整合性を確保できます。
たとえば、SD
テーブルの Customer
フィールドに負でない値を適用するトリガーは次のようになります。
<code class="language-sql">DELIMITER // CREATE TRIGGER trig_sd_check BEFORE INSERT ON Customer FOR EACH ROW BEGIN IF NEW.SD < 0 THEN SET NEW.SD = 0; END IF; END // DELIMITER ;</code>
このトリガーは、INSERT
テーブルの Customer
ステートメントをインターセプトします。 SD
が負の場合、トリガーはそれをゼロに設定します。 これにより、CHECK
制約と同様の機能が提供されます。
以上がMySQL CHECK 制約が機能しないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。