Maison >base de données >tutoriel mysql >Pourquoi mes contraintes MySQL CHECK ne fonctionnent-elles pas ?

Pourquoi mes contraintes MySQL CHECK ne fonctionnent-elles pas ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2025-01-10 11:20:45614parcourir

Why Aren't My MySQL CHECK Constraints Working?

Comprendre le comportement des contraintes CHECK dans MySQL

La gestion par MySQL des contraintes CHECK peut parfois être inattendue. Une contrainte CHECK peut sembler inactive, même si elle est correctement définie. La clé est de comprendre la compatibilité des versions de MySQL.

MySQL 8.0.16 a été la première version à prendre entièrement en charge les contraintes CHECK. Si votre version de MySQL est antérieure à 8.0.16, la clause CHECK sera analysée mais ignorée par tous les moteurs de stockage. Les données violant la contrainte seront insérées sans erreur.

Consultez le manuel de référence officiel de MySQL (https://www.php.cn/link/e6c19a87ef9e816e02ce247d4f41d38a) pour confirmer les capacités de votre version MySQL.

Alternatives aux contraintes CHECK (pour les anciennes versions de MySQL) :

Si votre version MySQL ne prend pas en charge la contrainte CHECK, envisagez d'utiliser des déclencheurs. Les déclencheurs exécutent du code personnalisé en réponse à des événements de base de données tels que l'insertion de lignes. Un déclencheur peut valider les données avant l'insertion, garantissant ainsi l'intégrité des données.

Par exemple, un déclencheur pour appliquer une valeur non négative pour le champ SD dans une table Customer pourrait être :

<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>

Ce déclencheur intercepte les INSERT déclarations sur la table Customer. Si SD est négatif, le déclencheur le met à zéro. Cela fournit une fonctionnalité similaire à une contrainte CHECK.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn