Maison >base de données >tutoriel mysql >Pourquoi mes contraintes MySQL CHECK ne fonctionnent-elles pas ?
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!