Maison >base de données >tutoriel mysql >Pourquoi les contraintes MySQL CHECK échouent-elles dans les versions antérieures à 8.0.16 ?
Problème d'échec de la contrainte MySQL CHECK
Lors de la définition des tables de base de données, il est important d'ajouter des contraintes pour garantir l'intégrité des données. Les contraintes CHECK vous permettent de spécifier les conditions que les valeurs d'une colonne spécifique doivent remplir. Cependant, dans MySQL 8.0.15 et versions antérieures, les contraintes CHECK ne sont pas appliquées, ce qui constitue un cas particulier.
Exemple :
<code class="language-sql">CREATE TABLE Customer ( SD integer CHECK (SD > 0), Last_Name varchar (30), First_Name varchar(30) );</code>
Après avoir créé ce tableau, essayez d'insérer des lignes avec des valeurs SD négatives :
<code class="language-sql">INSERT INTO Customer values ('-2', 'abc', 'zz');</code>
MySQL ne signalera pas d'erreur, même si la valeur insérée viole la contrainte CHECK spécifiée. En effet, selon le manuel de référence MySQL :
<code>CHECK子句会被解析,但所有存储引擎都会忽略它。</code>
Solution :
Pour résoudre ce problème, vous pouvez effectuer l'une des opérations suivantes :
<code class="language-sql">mysql> delimiter // mysql> 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 -> // mysql> delimiter ;</code>
Veuillez noter que l'exemple de déclenchement ci-dessus définit la valeur SD des nombres négatifs sur 0, vous pouvez modifier la logique de déclenchement en fonction de vos besoins réels.
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!