ホームページ >データベース >mysql チュートリアル >MySQL CHECK 制約が機能しないのはなぜですか?

MySQL CHECK 制約が機能しないのはなぜですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2025-01-10 11:20:45614ブラウズ

Why Aren't My MySQL CHECK Constraints Working?

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

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