Émulation des contraintes CHECK avec des déclencheurs MySQL
Dans MySQL, les contraintes CHECK, généralement utilisées pour garantir l'intégrité des données, ne sont pas entièrement prises en charge comme dans d'autres SGBDR. Cependant, il est possible de simuler leur fonctionnalité à l'aide de déclencheurs.
Est-il possible de construire un déclencheur retournant une erreur ?
Oui, il est possible de créer un déclencheur qui renvoie une erreur si une condition spécifiée n'est pas remplie. Cela émule efficacement le comportement d'une contrainte CHECK.
Exemple de déclencheur pour les mises à jour
Pour créer un déclencheur qui renvoie une erreur lors des mises à jour, utilisez le modèle suivant :
CREATE TRIGGER <trigger_name> BEFORE UPDATE ON <table_name> FOR EACH ROW BEGIN IF (condition_not_met) THEN SIGNAL SQLSTATE '45000'; SET MESSAGE_TEXT = 'Error message'; END IF; END;
Par exemple, pour vérifier que la valeur du mois dans le tableau "stats" est inférieure ou égale à 12 avant la mise à jour :
CREATE TRIGGER chk_stats1 BEFORE UPDATE ON stats FOR EACH ROW BEGIN IF (new.month > 12) THEN SIGNAL SQLSTATE '45000'; SET MESSAGE_TEXT = 'Month must be less than or equal to 12'; END IF; END;
Exemple de déclencheur pour les insertions
De même, pour les insertions :
CREATE TRIGGER <trigger_name> BEFORE INSERT ON <table_name> FOR EACH ROW BEGIN IF (condition_not_met) THEN SIGNAL SQLSTATE '45000'; SET MESSAGE_TEXT = 'Error message'; END IF; END;
Par exemple, pour vérifier la valeur du mois avant de l'insérer dans la table "stats" :
CREATE TRIGGER chk_stats BEFORE INSERT ON stats FOR EACH ROW BEGIN IF (new.month > 12) THEN SIGNAL SQLSTATE '45000'; SET MESSAGE_TEXT = 'Month must be less than or equal to 12'; END IF; END;
Ces déclencheurs simulent le comportement des contraintes CHECK, empêchant l'insertion ou la mise à jour des données si les conditions spécifiées ne sont pas respecté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!