Prévention des mises à jour de tables à l'aide de déclencheurs MySQL avec gestion des erreurs
MySQL fournit un mécanisme puissant pour garantir l'intégrité des données et les règles métier via des déclencheurs. Un scénario critique consiste à empêcher les mises à jour non autorisées ou invalides d’une table. Cet article montre comment exploiter les déclencheurs MySQL pour générer des erreurs et empêcher de telles mises à jour.
Lancement d'erreurs dans les déclencheurs
Depuis MySQL 5.5, la syntaxe SIGNAL permet aux développeurs de lancer exceptions dans les déclencheurs. L'instruction SIGNAL prend deux paramètres :
SIGNAL sqlstate SET message_text = 'Error Message';
où sqlstate spécifie le type d'exception et message_text définit le message d'erreur personnalisé. Le type d'exception doit être un code à cinq chiffres représentant la condition d'erreur applicable.
Création d'un déclencheur personnalisé pour la gestion des erreurs
Considérez l'exemple suivant : vous souhaitez empêcher met à jour une table si la nouvelle valeur d’une colonne spécifique est négative. Pour y parvenir, créez un déclencheur avant l'opération de mise à jour comme suit :
CREATE TRIGGER trg_before_update BEFORE UPDATE ON my_table FOR EACH ROW BEGIN DECLARE msg VARCHAR(128); IF NEW.column_name < 0 THEN SET msg = CONCAT('MyTriggerError: Negative value in column_name: ', CAST(NEW.column_name AS CHAR)); SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = msg; END IF; END
Le déclencheur vérifie si la nouvelle valeur de la colonne column_name est négative. Si c'est le cas, il construit un message d'erreur personnalisé et lève une exception à l'aide de l'instruction SIGNAL. Le 45000 SQLSTATE représente une exception non gérée définie par l'utilisateur.
Test du déclencheur
Exécutez les instructions suivantes pour tester le déclencheur :
-- Insert valid and invalid data: INSERT INTO my_table (column_name) VALUES (1), (-1), (2); -- Display the table contents: SELECT * FROM my_table; -- Attempt to insert invalid data: INSERT INTO my_table (column_name) VALUES (-1);
La première instruction INSERT échouera car une ligne contient une valeur négative, déclenchant l'erreur personnalisée définie dans le déclencheur. L'instruction INSERT suivante échouera également car le déclencheur empêche les mises à jour avec des valeurs négatives.
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!