Maison >base de données >tutoriel mysql >partage d'exemples d'utilisation de déclencheur MySQL
Cet article présente principalement les informations pertinentes sur l'explication détaillée des exemples d'utilisation des déclencheurs MySQL. Les amis qui en ont besoin peuvent s'y référer. J'espère qu'il pourra aider tout le monde.
Explication détaillée de la syntaxe du déclencheur MySQL :
Le déclencheur est une procédure stockée spéciale qui insère (encart), supprime (supprime) ou modifie (met à jour) une table spécifique. L'exécution est déclenchée lorsque les données qu'il contient sont exécutées et disposent de capacités de contrôle des données plus raffinées et complexes que les fonctions standard des données elles-mêmes. Les déclencheurs ne sont pas appelés par un programme, mais sont déclenchés par un événement. Appliquez automatiquement les règles métier lorsque les données sont modifiées, souvent utilisées pour renforcer les contraintes d’intégrité des données et les règles métier. Les déclencheurs peuvent interroger d'autres tables et contenir des instructions SQL répliquées. Les déclencheurs peuvent également être utilisés pour renforcer l’intégrité référentielle. Les déclencheurs peuvent appliquer des contraintes plus complexes que celles définies avec des contraintes de vérification.
(1).Syntaxe CREATE TRIGGER
CREATE TRIGGER trigger_nametrigger_time trigger_event ON tbl_name FOR EACH ROW trigger_stmt;
Le déclencheur est un objet de base de données nommé lié à la table . Cet objet est activé lorsqu'un événement spécifique se produit sur la table.
Le déclencheur est lié à la table nommée tbl_name. tbl_name doit faire référence à une table permanente. Un déclencheur ne peut pas être associé à une table ou une vue TEMPORAIRE.
trigger_time est le temps d'action du programme déclencheur. Il peut être AVANT ou APRÈS pour indiquer si le déclencheur est déclenché avant ou après l'instruction qui l'active.
trigger_event spécifie le type d'instruction qui active le programme déclencheur. trigger_event peut avoir l'une des valeurs suivantes :
(1).INSERT : Le déclencheur est activé lorsqu'une nouvelle ligne est insérée dans le tableau, par exemple via INSERT, LOAD DATA et REPLACE
déclarations.
(2).UPDATE : Le déclencheur est activé lorsqu'une ligne est modifiée, par exemple via l'instruction UPDATE.
(3).DELETE : le déclencheur est activé lorsqu'une ligne est supprimée de la table, par exemple via les instructions DELETE et REPLACE.
Il est important de noter que trigger_event n'est pas très similaire à l'instruction SQL qui active le programme déclencheur via des opérations de table. Par exemple, le déclencheur BEFORE sur INSERT peut être activé non seulement par l'instruction INSERT, mais également par l'instruction LOAD DATA. Un exemple qui peut prêter à confusion est INSERT INTO .. ON DUPLICATE UPDATE... Syntaxe : le déclencheur BEFORE INSERT s'activera pour chaque ligne, suivi du déclencheur AFTER INSERT, ou du déclencheur BEFORE UPDATE et AFTER UPDATE, selon Y a-t-il des clés en double activées la rangée.
Il ne peut pas y avoir deux déclencheurs pour une table donnée avec le même moment d'action et le même événement de déclenchement. Par exemple, pour une certaine table, il ne peut pas y avoir deux déclencheurs BEFORE UPDATE. Mais il peut y avoir 1 déclencheur BEFORE UPDATE et 1 déclencheur BEFORE INSERT, ou 1 déclencheur BEFOREUPDATE et 1 déclencheur AFTER UPDATE. trigger_stmt est l'instruction exécutée lorsque le déclencheur est activé. Si vous prévoyez d'exécuter plusieurs instructions, utilisez la structure d'instruction composée BEGIN ... END. De cette manière, les mêmes instructions autorisées dans les sous-programmes stockés peuvent être utilisées
(2) Syntaxe DROP TRIGGER
DROP TRIGGER[schema_name.]trigger_name supprime le programme déclencheur. . Le nom du schéma (schema_name) est facultatif. Si le schéma est omis, le déclencheur sera supprimé du schéma actuel.
Remarque : lors de la mise à niveau d'une version de MySQL antérieure à MySQL 5.0.10 vers 5.0.10 ou version ultérieure (y compris toutes les versions de MySQL 5.1), tous les déclencheurs doivent être supprimés avant la mise à niveau et les recréer ultérieurement, sinon. DROP TRIGGER ne fonctionne pas après la mise à niveau. L'instruction DROP TRIGGER nécessite le privilège SUPER.
(3). Utilisation des programmes déclencheurs
Dans cette section, nous présentons la méthode d'utilisation des programmes déclencheurs dans MySQL 5.1 et introduisons l'utilisation des programmes déclencheurs.
Un déclencheur est un objet de base de données nommé associé à une table qui sera activé lorsqu'un événement spécifique se produit sur la table. Dans certaines utilisations de déclencheurs, il peut être utilisé pour vérifier des valeurs insérées dans un tableau, ou pour effectuer des calculs sur des valeurs impliquées dans une mise à jour.
Le programme déclencheur est lié à la table. Lorsqu'une instruction INSERT, DELETE ou UPDATE est exécutée sur la table, le programme déclencheur sera activé. Les déclencheurs peuvent être configurés pour s’activer avant ou après l’exécution d’une instruction. Par exemple, un déclencheur peut être activé avant la suppression de chaque ligne du tableau ou après la mise à jour de chaque ligne. Pour créer un déclencheur ou supprimer un déclencheur, utilisez l'instruction CREATE TRIGGER ou DROP TRIGGER. Un déclencheur ne peut pas appeler une procédure stockée qui renvoie des données au client, ni utiliser du SQL dynamique à l'aide de l'instruction CALL (qui permet aux procédures stockées de renvoyer des données). au déclencheur via le programme de paramètres).
Les déclencheurs ne peuvent pas utiliser d'instructions qui démarrent ou terminent explicitement ou implicitement des transactions, telles que START TRANSACTION,
COMMIT ou ROLLBACK.
Utilisez les mots-clés OLD et NEW pour accéder aux colonnes des lignes affectées par le déclencheur (OLD et NEW ne sont pas sensibles à la casse).
Dans le déclencheur INSERT, seul NEW.col_name peut être utilisé, pas d'anciennes lignes. Dans un déclencheur DELETE, seul OLD.col_name peut être utilisé, aucune nouvelle ligne. Dans le déclencheur UPDATE, vous pouvez utiliser OLD.col_name pour faire référence à une colonne dans une ligne avant la mise à jour, ou NEW.col_name pour faire référence à une colonne dans la ligne mise à jour.
Les colonnes nommées avec OLD sont en lecture seule. Vous pouvez le référencer, mais pas le modifier. Pour les colonnes nommées avec NEW, vous pouvez y faire référence si vous disposez de l'autorisation SELECT. Dans le programme déclencheur BEFORE, si vous disposez de l'autorisation UPDATE, vous pouvez utiliser "SET NEW.col_name = value" pour modifier sa valeur. Cela signifie que vous pouvez utiliser des déclencheurs pour modifier les valeurs qui seront insérées dans de nouvelles lignes ou pour mettre à jour les valeurs dans les lignes. Dans le programme déclencheur BEFORE, la valeur NEW de la colonne AUTO_INCREMENT est 0, ce qui n'est pas le numéro de séquence qui sera automatiquement généré lorsqu'un nouvel enregistrement est effectivement inséré.
En utilisant la structure BEGIN ...END, vous pouvez définir un programme déclencheur qui exécute plusieurs instructions. Dans le bloc BEGIN, vous pouvez également utiliser d'autres syntaxes autorisées dans les sous-programmes stockés, telles que les conditions et les boucles. Cependant, tout comme les sous-programmes stockés, lors de la définition d'un programme déclencheur qui exécute plusieurs instructions, si vous utilisez le programme MySQL pour entrer dans le programme déclencheur, vous devez redéfinir le séparateur d'instructions afin de pouvoir utiliser le caractère ";" dans le programme déclencheur. définition. Dans l’exemple suivant, ces points sont démontrés. Dans cet exemple, un déclencheur UPDATE est défini qui vérifie la nouvelle valeur qui sera utilisée lors de la mise à jour de chaque ligne et modifie la valeur afin qu'elle soit comprise entre 0 et 100. Il doit s'agir d'un déclencheur AVANT car la valeur doit être vérifiée avant d'être utilisée pour mettre à jour la ligne :
mysql> delimiter // mysql> CREATE TRIGGER upd_check BEFORE UPDATE ON account -> FOR EACH ROW -> BEGIN -> IF NEW.amount < 0 THEN -> SET NEW.amount = 0; -> ELSEIF NEW.amount > 100 THEN -> SET NEW.amount = 100; -> END IF; -> END;// mysql> delimiter ;
Il est plus facile de définir la procédure stockée séparément, puis d'utiliser une simple instruction CALL appelle une procédure stockée à partir d'une procédure de déclenchement. Cette méthode est également utile si vous prévoyez d'appeler le même sous-programme à partir de plusieurs programmes déclencheurs. Lors de l'exécution du programme déclencheur, MySQL gère les erreurs comme suit :
(1) Si le programme déclencheur BEFORE échoue, l'opération sur la ligne correspondante ne sera pas effectuée.
(2) Le déclencheur AFTER n'est exécuté que si le déclencheur BEFORE (le cas échéant) et l'opération sur la ligne ont été exécutés avec succès.
(3) Si une erreur se produit lors de l'exécution du programme déclencheur AVANT ou APRES, cela entraînera l'échec de l'intégralité de l'instruction qui appelle le programme déclencheur.
(4) Pour les tables transactionnelles, si le programme déclencheur échoue (et l'échec de l'instruction entière qui en résulte), toutes les modifications effectuées par l'instruction seront annulées. Pour les tables non transactionnelles, ce type de restauration ne peut pas être effectué, donc même si l'instruction échoue, toutes les modifications apportées avant l'échec sont toujours valides.
Exemple 1 :
mysql> CREATE TABLE account (acct_num INT, amount DECIMAL(10,2)); mysql> CREATE TRIGGER ins_sum BEFORE INSERT ON account FOR EACH ROW SET @sum = @sum + NEW.amount;
Recommandations associées :
Questions sur les déclencheurs MySQL
Présentation des déclencheurs MySQL et comment créer et supprimer des déclencheurs
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!