Comment créer un déclencheur SQL

Vous créez un déclencheur SQL, assez logiquement, avec un CREATE TRIGGER

Sommaire

déclaration. Après le déclenchement est créé, il guette - en attente de l'événement de déclenchement se produit. Lorsque l'événement déclencheur survient, bang! Les feux de déclenchement.

La syntaxe de la CREATE TRIGGER déclaration est assez complexe, mais vous pouvez le décomposer en morceaux compréhensibles. Prenez d'abord un regard sur l'image globale:

CREATE TRIGGER trigger_nametrigger_action_timetrigger_eventON nom_table [REFERENCEMENT old_or_new_value_alias_list] triggered_action

Le nom du déclencheur est l'identifiant unique pour ce déclencheur. Le temps de déclenchement de l'action est le temps que vous voulez que l'action déclenchée de se produire: soit AVANT ou APRÈS l'événement déclencheur. Le fait qu'une action déclenchée peut se produire avant l'événement qui est censé être la cause qu'elle se produise peut sembler un peu bizarre, mais dans certains cas, cette capacité peut être très utile.

Étant donné que le moteur de base sait qu'il est sur le point d'exécuter un événement de déclenchement avant d'exécuter réellement, il a la capacité à prendre en sandwich l'événement déclenché à l'avant de l'exécution de l'événement de déclenchement, si un temps de déclenchement d'action AVANT a été spécifié.

Trois événements déclencheurs possibles peuvent causer un déclencheur pour le feu: l'exécution d'un INSERT déclaration, un EFFACER déclaration, ou un METTRE À JOUR déclaration. Ces trois déclarations ont le pouvoir de changer le contenu d'une table de base de données.




Ainsi, toute introduction d'une ou plusieurs rangées dans la table d'objet, toute suppression d'une ou plusieurs lignes de la table d'objet, ou d'une mise à jour d'une ou plusieurs colonnes dans une ou plusieurs lignes de la table d'objet peut provoquer un déclenchement d'un incendie. ON nom_table, bien entendu, se réfère à la table pour laquelle un INSERT, EFFACER, ou METTRE À JOUR a été spécifié.

Déclaration et rangée déclencheurs

La triggered_action dans l'exemple précédent a la syntaxe suivante:

[FOR EACH ROW] QUAND 

Vous pouvez spécifier la manière dont le déclenchement agira:

  • Déclenchement de la ligne: Le déclencheur se déclenche une fois à la rencontre du INSERT, EFFACER, ou METTRE À JOUR déclaration qui constitue l'événement déclencheur.

  • Déclaration déclencheur: Le déclencheur se déclenche plusieurs fois, une fois pour chaque ligne de la table de l'objet qui est affecté par l'événement déclencheur.

Comme indiqué par les crochets, le POUR CHAQUE clause est facultative. Malgré cela, la gâchette doit agir d'une façon ou l'autre. Sinon POUR CHAQUE clause est spécifiée, le comportement par défaut est POUR CHAQUE ÉTAT.

Quand un trigger

La condition de recherche dans le QUAND clause vous permet de spécifier les circonstances dans lesquelles un déclencheur se déclenche. Spécifiez un prédicat, et si le prédicat est vrai, le déclenchement feu si elle est fausse, il ne sera pas. Cette capacité augmente considérablement l'utilité des déclencheurs.

Vous pouvez spécifier que le déclenchement de feux qu'après une certaine valeur de seuil a été dépassé, ou lorsque toute autre condition peut être déterminée pour être Vrai ou Faux.

L'instruction SQL déclenchée

L'instruction SQL déclenchée peut être une seule instruction SQL ou une séquence d'instructions SQL exécutées l'une après l'autre. Dans le cas d'une seule instruction SQL, l'instruction SQL déclenchée est simplement une instruction SQL ordinaire.

Pour une séquence d'instructions SQL, cependant, vous devez garantir l'atomicité de veiller à ce que l'opération ne soit pas interrompu en cours de route, laissant la base de données dans un état indésirable. Vous pouvez le faire avec un BEGIN-END le bloc qui comprend ATOMIQUE mot-clé:

BEGIN ATOMIC {instruction SQL 1} {SQL déclaration 2} ... {instruction SQL n }FIN

Un exemple de définition gâchette

Supposons que le directeur des ressources humaines de l'entreprise veut être informé chaque fois que l'un des directeurs régionaux embauche d'un nouvel employé. Le trigger suivant peut gérer cette situation bien:

CREATE TRIGGER newhireBEFORE INSERT SUR CHAQUE employeeFOR sendmail STATEMENTBEGIN ATOMICCALL ('de HRDirector') INSERT INTO logtableVALUES ('NEWHIRE', CURRENT_USER, CURRENT_TIMESTAMP) -END-

Chaque fois qu'une nouvelle ligne est insérée dans la table de NEWHIRE, un e-mail est tiré hors du directeur des ressources humaines avec les détails, et le nom de connexion de la personne faisant l'insertion et l'heure de l'insertion sont enregistrées dans une table de journal, fournissant une piste de vérification.


» » » » Comment créer un déclencheur SQL