Maison > base de données > tutoriel mysql > Comment écrire des contraintes de vérification MySQL

Comment écrire des contraintes de vérification MySQL

(*-*)浩
Libérer: 2020-09-15 13:44:44
original
14008 Les gens l'ont consulté

Les contraintes de vérification MySQL (CHECK) peuvent être implémentées via l'instruction CREATE TABLE ou ALTER TABLE, définies en fonction des exigences d'intégrité réelles de l'utilisateur. Il peut appliquer des contraintes CHECK sur des colonnes ou des tables individuellement. Mais le manuel mysql écrit très clairement : "Tous les moteurs de stockage analysent la clause CHECK, mais ignorent la clause CHECK." Ainsi, même si cela peut être écrit ainsi, cela n'aura pas d'effet restrictif.

Tutoriel recommandé : Tutoriel MySQL

Comment écrire des contraintes de vérification MySQL

La vérification des contraintes utilise le mot-clé CHECK. Le format de syntaxe spécifique est le suivant :

CHECK <表达式>
Copier après la connexion

Où : fait référence à l'expression SQL, qui est utilisée pour spécifier les qualifications qui doivent être vérifiées.
Si la clause de contrainte CHECK est placée après la définition d'une colonne dans le tableau, cette contrainte est également appelée contrainte CHECK basée sur les colonnes.
Lors de la mise à jour des données de la table, le système vérifiera si les lignes de données mises à jour répondent aux conditions de la contrainte CHECK. MySQL peut utiliser des expressions simples pour implémenter des contraintes CHECK, et permet également l'utilisation d'expressions complexes comme conditions de qualification, comme l'ajout de sous-requêtes aux conditions de qualification.

Remarque : Si la clause de contrainte CHECK est placée après la définition de toutes les colonnes et la définition des contraintes de clé primaire et des définitions de clé étrangère, cette contrainte est également appelée contrainte CHECK basée sur une table. Cette contrainte peut définir des qualifications sur plusieurs colonnes du tableau en même temps.

Définir les contraintes de vérification lors de la création d'une table

Les règles de syntaxe pour définir les contraintes de vérification lors de la création d'une table sont les suivantes :

CHECK(<检查约束>)
Copier après la connexion

Créer des données tb_emp7 dans la table de base de données test_db, la valeur du champ salaire doit être supérieure à 0 et inférieure à 10 000. L'instruction SQL d'entrée et les résultats d'exécution sont les suivants.

mysql> CREATE TABLE tb_emp7
-> (
   -> id INT(11) PRIMARY KEY,
   -> name VARCHAR(25),
   -> deptId INT(11),
   -> salary FLOAT,
   -> CHECK(salary>0 AND salary<100),
   -> FOREIGN KEY(deptId) REFERENCES tb_dept1(id)
   -> );
Query OK, 0 rows affected (0.37 sec)
Copier après la connexion

Ajouter des contraintes de vérification lors de la modification de la table

Les règles de syntaxe pour définir les contraintes de vérification lors de la modification de la table sont les suivantes :

ALTER TABLE tb_emp7 ADD CONSTRAINT <检查约束名> CHECK(<检查约束>)
Copier après la connexion

Modifier le Table de données tb_dept, exigences La valeur du champ id est supérieure à 0. L'instruction SQL d'entrée et les résultats d'exécution sont les suivants.

mysql> ALTER TABLE tb_emp7
   -> ADD CONSTRAINT check_id
   -> CHECK(id>0);
Query OK, 0 rows affected (0.19 sec)
Records: 0  Duplicates: 0  Warnings: 0
Copier après la connexion

Solution : utilisez des déclencheurs pour implémenter la fonction de contrainte de vérification CHECK.

(1) Créez tb_student (tableau d'informations sur les étudiants).

-- 创建学生信息表
CREATE TABLE tb_student
(
   	id INT AUTO_INCREMENT PRIMARY KEY,
   	name VARCHAR(30),
   	age INT NOT NULL
);
Copier après la connexion

(2) Créez un déclencheur qui vérifie si le champ d'âge est valide.

 -- 创建触发器 
CREATE TRIGGER trg_tb_student_insert_check BEFORE INSERT
ON tb_student FOR EACH ROW
BEGIN
   	DECLARE msg varchar(100);
 
   	IF NEW.age <= 0 OR NEW.age >= 100 
   	THEN
   	SET msg = CONCAT('您输入的年龄值:',NEW.age,' 为无效的年龄,请输入0到100以内的有效数字。');
   	SIGNAL SQLSTATE 'HY000' SET MESSAGE_TEXT = msg;
   	END IF;
END;
Copier après la connexion

(3) Écrivez des déclarations de test.

INSERT INTO tb_student(name,age) VALUES('Kevin',120);
Copier après la connexion

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!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal