Le déclencheur MySQL peut-il émuler une contrainte CHECK ?
Contrairement aux autres SGBDR, MySQL ne prend pas entièrement en charge les contraintes CHECK. Cependant, il propose des déclencheurs comme alternative. Les déclencheurs conventionnels définissent des valeurs par défaut plutôt que de renvoyer des erreurs, laissant les utilisateurs se demander s'il est possible de créer des déclencheurs qui appliquent des conditions et renvoient des erreurs telles que des contraintes CHECK.
Création de déclencheurs renvoyant des erreurs
La réponse est oui. Voici comment construire de tels déclencheurs :
Pour les opérations de mise à jour :
DELIMITER $$ CREATE TRIGGER chk_stats1 BEFORE UPDATE ON stats FOR EACH ROW BEGIN IF NEW.month > 12 THEN SIGNAL SQLSTATE '45000'; SET MESSAGE_TEXT = 'Cannot add or update row: only'; END IF; END; $$
Ce déclencheur intercepte les tentatives de mise à jour sur la table « statistiques ». Si la valeur « mois » dans les nouvelles données dépasse 12, cela génère une erreur SQLSTATE et définit un message d'erreur significatif.
Pour les opérations d'insertion :
DELIMITER $$ CREATE TRIGGER chk_stats BEFORE INSERT ON stats FOR EACH ROW BEGIN IF NEW.month > 12 THEN SIGNAL SQLSTATE '45000'; SET MESSAGE_TEXT = 'Cannot add or update row: only'; END IF; END; $$
De même, ce déclencheur vérifie les valeurs « mois » avant d'insérer des données dans la table « statistiques ».
Émulation des contraintes CHECK
Ces déclencheurs émulent efficacement les contraintes CHECK en appliquant l'option ' plage du mois. Toute tentative de mise à jour ou d'insertion de données avec une valeur « mois » supérieure à 12 déclenche une erreur. Cela permet l'intégrité des données en empêchant le stockage de valeurs non valides dans la base de données.
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!