Maison  >  Article  >  base de données  >  Comment utiliser les contraintes de vérification dans MySQL

Comment utiliser les contraintes de vérification dans MySQL

(*-*)浩
(*-*)浩original
2019-05-07 13:57:0120822parcourir

Méthodes d'utilisation des contraintes de vérification dans MySQL : 1. Si la plage de champs sur laquelle les contraintes CHECK doivent être définies est petite et qu'il est plus facile d'énumérer toutes les valeurs, le type du champ peut être défini sur type enum ou définir le type. 2. Si la plage de champs pour laquelle les contraintes CHECK doivent être définies est grande et qu'il est difficile d'énumérer toutes les valeurs, utilisez des déclencheurs au lieu de contraintes pour garantir la validité des données.

Comment utiliser les contraintes de vérification dans MySQL

Dans certains cas, nous avons besoin que les champs soient saisis dans une plage spécifiée,

Par exemple : le sexe ne peut être saisi que comme « homme » ' ou 'femelle'', le solde ne peut être que supérieur à 0 et d'autres conditions,

Par exemple : vous pouvez exiger que la colonne code postal de la table des auteurs n'autorise la saisie que de codes postaux à six chiffres.

En plus du contrôle programmatique, nous pouvons également utiliser les contraintes CHECK pour standardiser les données.

Cependant :
Tous les moteurs de stockage MySQL ne prennent pas en charge les contraintes de vérification. MySQL analysera la clause de vérification mais l'ignorera lors de l'insertion des données, donc la vérification ne fonctionnera pas.

Deux façons de résoudre ce problème :

1. Si la plage de champs à définir pour les contraintes CHECK est petite et qu'il est plus facile de lister toutes les valeurs, vous pouvez considérer Le type de ce champ est défini sur le type d'énumération enum() ou le type de collection set().

Par exemple, le champ sexe peut être défini comme ceci, et l'insertion de valeurs autres que la valeur d'énumération ne sera pas autorisée.

CREATE TABLE `Student` (
  `Sno` char(8) NOT NULL,
  `Sname` varchar(10) NOT NULL,
  `Sex` enum('男','女') NOT NULL DEFAULT '男',
  `Age` tinyint(4) NOT NULL DEFAULT '20',
  `Phonenumber` char(12) DEFAULT NULL,
  `Sdept` varchar(20) NOT NULL,
  PRIMARY KEY (`Sno`),
  UNIQUE KEY `Phonenumber` (`Phonenumber`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

2. Si la plage de champs pour laquelle les contraintes CHECK doivent être définies est grande et qu'il est difficile d'énumérer toutes les valeurs, telles que des entiers ou une certaine plage, alors les déclencheurs ne peuvent être utilisés qu'à la place des contraintes. pour obtenir la validité des données.

DELIMITER $
create trigger studentcheck before insert on Student for each row
begin
if new.Age<15 or new.Age>30 then set new.Age=20;end if;
end $
DELIMITER ;

Test :

mysql> insert into Student(Sno,Sname,Sex,Age,Phonenumber,Sdept) values(&#39;5&#39;,&#39;Joe&#39;,&#39;m&#39;,0,&#39;12345243912&#39;,&#39;CS&#39;);
ERROR 1265 (01000): Data truncated for column &#39;Sex&#39; at row 1
mysql> insert into Student(Sno,Sname,Sex,Age,Phonenumber,Sdept) values(&#39;5&#39;,&#39;Joe&#39;,&#39;男&#39;,0,&#39;12345243912&#39;,&#39;CS&#39;);
Query OK, 1 row affected (0.00 sec)

mysql> select * from Student;
+-----+-------+-----+-----+-------------+-------+
| Sno | Sname | Sex | Age | Phonenumber | Sdept |
+-----+-------+-----+-----+-------------+-------+
| 4   | nancy | m   |   0 | 12345243965 | CS    |
| 5   | Joe   | 男  |  20 | 12345243912 | CS    |
+-----+-------+-----+-----+-------------+-------+
2 rows in set (0.00 sec)

On voit que maintenant le sexe doit être sélectionné entre "masculin" et "femelle", sinon l'insertion échoue lorsque l'âge ne répond pas aux spécifications, en raison ; à l'existence du déclencheur, il sera automatiquement réglé sur la valeur par défaut 20.

Cela peut résoudre le problème des contraintes de contrôle invalides.

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