Maison >base de données >tutoriel mysql >Comment pouvez-vous garantir l'intégrité des données dans MySQL lorsque les contraintes de vérification ne sont pas disponibles ?
Prévention des insertions et des mises à jour avec des déclencheurs dans MySQL
MySQL n'a pas la capacité d'appliquer des contraintes de vérification, ce qui rend nécessaire d'explorer des méthodes alternatives pour empêcher modifications de données non autorisées.
Considérez le scénario décrit, où l'attribut d'agence dans la table foo ne peut prendre que des valeurs comprises entre 1 et 5.
On pourrait tenter d'utiliser un déclencheur pour intercepter les insertions ou les mises à jour qui violent cette contrainte, comme le montre l'exemple d'extrait de code. Cependant, le simple fait d'omettre l'instruction après la condition if (comme indiqué par #Do Nothing ?) n'empêchera pas l'opération de se produire.
SIGNAL Keyword to the Rescue
La syntaxe MySQL SIGNAL fournit la solution. Il permet de générer une erreur personnalisée et de fournir un message d'erreur significatif. Voici une version améliorée du déclencheur :
create trigger agency_check before insert on foo for each row begin if (new.agency < 1 or new.agency >5) then SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'Agency must be between 1 and 5'; end if end
Ce déclencheur générera désormais une erreur avec le message spécifié si une tentative est effectuée pour insérer ou mettre à jour une ligne avec une valeur d'agence non valide. L'erreur sera interceptée par le client MySQL et affichée à l'utilisateur.
Conclusion
En utilisant le mot-clé SIGNAL dans un déclencheur, nous surmontons efficacement le manque de vérification de MySQL l’application des contraintes et fournit un mécanisme pour empêcher les manipulations non autorisées de données. Cette approche garantit l'intégrité des données et empêche l'ajout ou la modification de données non valides dans la table foo.
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!