Database
 sql >> Base de données >  >> RDS >> Database

Que sont les triggers en SQL et comment les implémenter ?

Un déclencheur en SQL est un code procédural qui est automatiquement exécuté en réponse à certains événements sur une table spécifiée. Il est important de comprendre comment ces petits codes font une énorme différence dans les performances de la base de données. Dans cet article, vous apprendrez à implémenter des déclencheurs avec des exemples.

Les sujets suivants seront abordés dans cet article :

  • Qu'est-ce qu'un déclencheur ?
  • Syntaxe et exemple
  • Opération dans les déclencheurs
  • Avantage et inconvénient

Qu'est-ce qu'un déclencheur ?

Les déclencheurs sont les codes SQL qui sont automatiquement exécutés en réponse à certains événements sur une table particulière. Ceux-ci sont utilisés pour maintenir l'intégrité des données. Un déclencheur en SQL fonctionne comme un déclencheur réel. Par exemple, lorsque la gâchette du pistolet est enfoncée, une balle est tirée. Nous le savons tous, mais quel est le lien avec les déclencheurs en SQL ? Pour comprendre cela, considérons une situation hypothétique.

John est le responsable marketing d'une entreprise. Lorsqu'un nouveau client est entré dans la base de données de l'entreprise, il doit envoyer le message de bienvenue à chaque nouveau client. S'il s'agit d'un ou deux clients, John peut le faire manuellement, mais que se passe-t-il si le nombre est supérieur à mille ? Eh bien, dans un tel scénario, les déclencheurs sont utiles.

Ainsi, John peut désormais créer facilement un déclencheur qui enverra automatiquement un e-mail de bienvenue aux nouveaux clients une fois leurs données saisies dans la base de données. J'espère donc que vous êtes clair avec l'introduction des déclencheurs dans SQL.

Rappelez-vous toujours qu'il ne peut pas y avoir deux déclencheurs avec un temps d'action et un événement similaires pour une table. Par exemple, nous ne pouvons pas avoir deux déclencheurs BEFORE UPDATE pour une table. Mais nous pouvons avoir un AVANT LA MISE À JOUR et un AVANT INSERER déclencheur, ou un BEFORE UPDATE et un APRÈS MISE À JOUR déclencheur.

Avant d'approfondir les principes fondamentaux des déclencheurs, je vous suggère de comprendre les concepts de base et de normalisation SQL afin de mieux comprendre les déclencheurs en SQL.

Syntaxe et exemple

Regardons maintenant la syntaxe d'un déclencheur.

Create Trigger Trigger_Name
(Before | After)  [ Insert | Update | Delete]
on [Table_Name]
[ for each row | for each column ]
[ trigger_body ]

Permettez-moi maintenant de décomposer cette syntaxe et d'expliquer chaque partie en détail.

  • Créer un déclencheur
    Ces deux mots clés permettent de spécifier qu'un bloc déclencheur va être déclaré.
  • Trigger_Name
    Il spécifie le nom du déclencheur. Le nom du déclencheur doit être unique et ne doit pas se répéter.
  • ( Avant | Après )
    Ceci spécifie quand le déclencheur sera exécuté. Il nous indique l'heure à laquelle le déclencheur est lancé, c'est-à-dire avant l'événement en cours ou après.
  • Avant les déclencheurs sont utilisés pour mettre à jour ou valider les valeurs d'enregistrement avant qu'elles ne soient enregistrées dans la base de données.
  • Après les déclencheurs sont utilisés pour accéder aux valeurs de champ définies par le système et pour effectuer des modifications dans d'autres enregistrements. Les enregistrements qui activent le déclencheur après sont en lecture seule. Nous ne pouvons pas utiliser le déclencheur Après si nous voulons mettre à jour un enregistrement, car cela entraînerait une erreur de lecture seule.
  • [ Insérer | Mettre à jour | Supprimer ]
    Ce sont les opérations DML et nous pouvons utiliser l'une ou l'autre dans un déclencheur donné.
  • sur [ Nom_Table ]
    Nous devons mentionner le nom de la table sur laquelle le déclencheur est appliqué. N'oubliez pas d'utiliser sur mot-clé et assurez-vous également que la table sélectionnée est présente dans la base de données.
  • [ pour chaque ligne | pour chaque colonne ]
    1. Le déclencheur au niveau de la ligne est exécuté avant ou après toute valeur de colonne d'une ligne modifications
    2. Le déclencheur au niveau de la colonne est exécuté avant ou après la colonne spécifiée modifications
  • [ trigger_body]
    Il se compose de requêtes qui doivent être exécutées lorsque le déclencheur est appelé.

Il s'agissait donc d'un simple déclencheur. Mais nous pouvons également créer un déclencheur imbriqué qui peut faire plusieurs processus. Il est également très important de le gérer et de le terminer au bon moment. Si nous ne terminons pas le déclencheur correctement, cela peut conduire à une boucle infinie.

Vous vous demandez peut-être dans quel scénario nous pouvons utiliser le déclencheur imbriqué. Plutôt que de vous donner une réponse personnalisée, laissez-moi partager un scénario avec vous, qui vous aidera à mieux comprendre le déclencheur imbriqué. Dans la continuité du scénario précédent, John a envoyé un e-mail pour chaque nouveau client ajouté à la base de données de l'entreprise. Maintenant, que se passe-t-il s'il souhaite garder une trace du nombre de clients à qui l'e-mail a été envoyé ? Maintenant, John doit créer un déclencheur imbriqué pour garder la trace du décompte tout en envoyant un e-mail.

C'était donc une question de syntaxe des déclencheurs, essayons maintenant d'implémenter un exemple de déclencheurs en SQL.

Exemple de déclencheur :

Dans le déclencheur ci-dessous, nous essayons de calculer le pourcentage de l'étudiant dès que ses détails sont mis à jour dans la base de données.

CREATE TRIGGER sample_trigger
before INSERT
ON student
FOR EACH ROW
SET new.total = new.marks/6;

Voici le "NOUVEAU" le mot-clé fait référence à la ligne qui est affectée.

Opérations dans les déclencheurs

Nous pouvons effectuer de nombreuses opérations à l'aide de déclencheurs. Certains peuvent être simples et d'autres un peu complexes, mais une fois que nous avons parcouru la requête, c'est facile à comprendre.

  • SUPPRIMER UN DÉCLENCHEUR
DROP TRIGGER trigger name;
  • Afficher un déclencheur

Le code ci-dessous affichera tous les déclencheurs présents.

SHOW TRIGGERS;

Le code ci-dessous affichera tous les déclencheurs présents dans une base de données particulière.

SHOW TRIGGERS
IN database_name;

Exemple :

SHOW TRIGGERS IN edureka;

Dans l'exemple ci-dessus, tous les déclencheurs présents dans la base de données nommée Edureka seront affichés.

Nous examinons également certaines variantes majeures des déclencheurs, c'est-à-dire Avant l'insertion et Après l'insertion. Nous avons déjà vu un déclencheur dans l'exemple. Mais avec l'aide du tableau, voyons comment cela fonctionne exactement.

Comme nous avons déjà compris comment créer un déclencheur, comprenons maintenant les deux variantes du déclencheur, à savoir Avant l'insertion et Après l'insertion. afin de les mettre en œuvre, créons une table d'étudiants avec différentes colonnes comme indiqué ci-dessous :

CREATE TABLE Student(
studentID INT NOT NULL AUTO_INCREMENT,
FName VARCHAR(20),
LName VARCHAR(20),
Address VARCHAR(30),
City VARCHAR(15),
Marks INT,
PRIMARY KEY(studentID)
);

Maintenant, si nous exécutons cette requête, nous obtenons le tableau suivant.

Essayons d'utiliser la première variante, c'est-à-dire Avant d'insérer

CREATE TRIGGER calculate
before INSERT 
ON student
FOR EACH ROW
SET new.marks = new.marks+100;

Ici, lorsque nous insérons automatiquement des données dans la table des étudiants, le déclencheur sera invoqué. Le déclencheur ajoutera 100 à la colonne des notes dans la colonne des élèves.

Utilisons maintenant la deuxième variante, c'est-à-dire Après Insérer

Pour utiliser cette variante, nous avons besoin d'un tableau supplémentaire, c'est-à-dire le pourcentage dans lequel le déclencheur stockera les résultats. Utilisez le code ci-dessous pour créer le tableau des pourcentages.

create table Final_mark(
per int );

Utilisons maintenant le déclencheur après insertion

CREATE TRIGGER total_mark
after insert 
ON student
FOR EACH ROW
insert into Final_mark values(new.marks);

Ici, lorsque nous insérons des données dans la table, déclencheur total_mark stockera le résultat dans la table Final_mark.

C'était tout à propos de l'opération sur les déclencheurs, allons maintenant de l'avant et examinons ses avantages et ses inconvénients.

Avantages et inconvénients des déclencheurs

Avantages

  • Forcer la sécurité approbations sur la table qui sont présentes dans la base de données
  • Les déclencheurs offrent un autre moyen de vérifier l'intégrité des données
  • Réaction invalide échanges
  • Les déclencheurs gèrent les erreurs à partir de la couche de base de données
  • Normalement, les déclencheurs peuvent être utiles pour inspecter les données changements dans les tableaux
  • Les déclencheurs offrent un autre moyen d'exécuter destâches planifiées . En utilisant des déclencheurs, nous n'avons pas besoin d'attendre que les événements planifiés s'exécutent car les déclencheurs sont invoqués automatiquement avant ou après qu'une modification soit apportée aux données d'une table

Inconvénient s

  • Les déclencheurs ne peuvent fournir que des validations étendues , c'est-à-dire pas toutes les validations de type. Pour des validations simples, vous pouvez utiliser les contraintes NOT NULL, UNIQUE, CHECK et FOREIGN KEY
  • Les déclencheurs peuvent augmenter le overhead de la base de données
  • Les déclencheurs peuvent être difficiles àdépanner car ils s'exécutent automatiquement dans la base de données, ce qui peut ne pas être invisible pour les applications clientes

Ceci nous amène à la fin de cet article sur les déclencheurs dans SQL. J'espère que vous avez compris les concepts de déclencheurs.

Si vous souhaitez en savoir plus sur MySQL et découvrir cette base de données relationnelle open source, consultez notre formation de certification MySQL DBA qui comprend une formation en direct dirigée par un instructeur et de vrais -expérience de projet de vie. Cette formation vous aidera à comprendre MySQL en profondeur et vous aidera à maîtriser le sujet.

Vous avez une question pour nous ? Veuillez le mentionner dans la section des commentaires de ce Déclencheurs en SQL et nous vous répondrons.