Utilisation de déclencheurs MySQL pour imiter les contraintes CHECK
MySQL, contrairement aux autres SGBDR, permet de comprendre les contraintes CHECK mais ne parvient pas à les appliquer. Cette limitation a nécessité l’exploration d’approches alternatives, notamment l’utilisation de déclencheurs. Cependant, bon nombre de ces déclencheurs définissent simplement des valeurs par défaut plutôt que de renvoyer des erreurs.
Les déclencheurs peuvent-ils être construits pour renvoyer des erreurs lorsque les conditions ne sont pas remplies ?
En effet, il est Il est possible de construire un déclencheur qui renvoie une erreur si une condition spécifique n'est pas remplie. En utilisant les instructions SIGNAL et SET MESSAGE_TEXT, un déclencheur peut émuler efficacement une contrainte CHECK.
Implémentation du déclencheur
Considérez le déclencheur suivant, qui simule une contrainte CHECK qui garantit le champ "mois" ne peut excéder 12 :
delimiter $$ create trigger chk_stats 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 fonctionne avant une opération de mise à jour et vérifie la nouvelle valeur du champ "mois". Si la valeur dépasse 12, une erreur est générée avec le SQLSTATE '45000' et un message "Impossible d'ajouter ou de mettre à jour la ligne : uniquement."
Déclencheur pour les insertions
Un déclencheur similaire peut être utilisé 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; $$
En utilisant les déclencheurs de cette manière, vous pouvez efficacement répliquer la fonctionnalité des contraintes CHECK dans MySQL, garantissant l'intégrité des données et empêchant l'insertion ou la mise à jour de valeurs non valides.
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!