Sauter à un chapitre clé
Les déclencheurs SQL expliqués
Un déclencheur est un objet de base de données nommé qui exécute automatiquement une action spécifique lorsqu'un événement se produit, tel qu'une instruction INSERT, UPDATE, DELETE ou TRUNCATE sur une table ou une vue spécifique. Les déclencheurs SQL te permettent d'effectuer des actions supplémentaires en réponse à des modifications de données, ce qui contribue à maintenir l'intégrité de ta base de données.
Concepts de base des déclencheurs SQL
En SQL, les déclencheurs sont des outils importants pour maintenir la cohérence des données, appliquer les règles de gestion et vérifier les modifications des données. Voici quelques concepts fréquemment utilisés dans le contexte des déclencheurs SQL :- Événement déclencheur : L'événement qui provoque l'exécution d'un déclencheur, comme les instructions INSERT, UPDATE ou DELETE.
- Action du déclencheur : L'action effectuée par le déclencheur, impliquant généralement des modifications sur une ou plusieurs tables.
- Événement déclencheur : L'événement qui déclenche l'exécution du déclencheur. Cela inclut les opérations de manipulation de données telles que l'insertion, la mise à jour ou la suppression d'enregistrements dans une table.
- Table de déclenchement : La table sur laquelle l'événement déclencheur est défini, par exemple la table en cours de modification ou d'accès.
Comment fonctionnent les déclencheurs SQL
Lorsqu'un événement se produit et qu'il remplit les conditions définies dans un déclencheur, l'action spécifiée dans le déclencheur est automatiquement exécutée. Voici un exemple qui explique le processus :Supposons que tu aies une boutique en ligne avec une table nommée commandes. Chaque fois qu'une nouvelle commande est INSÉRÉE, tu veux diminuer le stock disponible du produit de la quantité donnée. Un déclencheur peut être créé sur la table des commandes qui s'exécute chaque fois qu'une nouvelle commande est INSÉRÉE, et ce déclencheur mettrait alors automatiquement à jour la table des stocks.
Types de déclencheurs SQL et cas d'utilisation
Les déclencheurs peuvent être divisés en différents types en fonction de l'événement déclencheur ou du niveau auquel ils sont exécutés. Comprendre ces types de déclencheurs te permet de décider quel type convient à ton cas d'utilisation spécifique.Déclencheurs avant et après
Les déclencheurs avant et après sont déterminés par le moment de leur exécution :- Déclencheurs avant
(AVANT INSERT
,AVANT UPDATE
,AVANT DELETE
) : Ces déclencheurs s'exécutent avant l' événement déclencheur. Ils peuvent être utilisés pour modifier les données avant qu'elles ne soient enregistrées dans la base de données, ce qui est utile pour la validation ou le nettoyage des données. - Déclencheurs après
(AFTER INSERT
,AFTER UPDATE
,AFTER DELETE
) : Ces déclencheurs s'exécutent après l 'événement déclencheur. Ils peuvent être utiles pour les actions qui dépendent des modifications apportées par l'événement, comme le maintien d'un enregistrement des modifications ou la mise à jour de tables connexes.
Il est important de noter que TRUNCATE ne peut pas être directement associé à un déclencheur car il n'est pas enregistré par ligne. Cependant, il est possible de créer un déclencheur sur une table auxiliaire et d'utiliser ensuite une instruction DELETE sur cette table pour déclencher l'action souhaitée.
Déclencheurs au niveau des lignes et des états
Les déclencheurs de niveau ligne et de niveau état se distinguent par la portée de l'événement déclencheur :- Déclencheurs au niveau de la ligne
(POUR CHAQUE LIGNE
) : Ces déclencheurs sont exécutés une fois pour chaque ligne affectée par l'événement déclencheur. Ils sont utiles pour les opérations qui doivent être appliquées à des enregistrements individuels, comme la conservation d'un historique des modifications pour chaque ligne. - Déclencheurs au niveau de la déclaration: Ces déclencheurs sont exécutés une fois pour chaque événement déclencheur, quel que soit le nombre de lignes affectées. Ils conviennent aux opérations qui doivent être exécutées une fois par événement, comme la gestion des tableaux récapitulatifs ou d'audit.
Un exemple pratique de déclencheur au niveau de la ligne serait de garder une trace de la dernière date de modification pour chaque ligne d'un tableau. Lorsqu'une nouvelle ligne est insérée ou qu'une ligne existante est mise à jour, le déclencheur met à jour une colonne "last_modified" pour la ligne concernée.
Travailler avec des déclencheurs SQL Exemples
Pour créer un déclencheur SQL, tu dois d'abord comprendre la syntaxe de création d'un déclencheur, puis l'appliquer à un cas d'utilisation pratique, comme la création d'un déclencheur à des fins d'audit ou pour maintenir l'intégrité référentielle entre des tables liées.Syntaxe de création d'un déclencheur SQL
La syntaxe de création d'un déclencheur SQL varie en fonction du système de gestion de base de données que tu utilises, mais la structure générale reste la même. Voici un aperçu de la syntaxe de base :CREATE TRIGGER nom_du_gâcheur {BEFORE|AFTER} {INSERT|UPDATE|DELETE} ON table_name [FOR EACH ROW] trigger_body ;
CREATE TRIGGER
: Il s'agit de la commande utilisée pour créer un nouveau déclencheur.nom_du_déclencheur
: Un nom unique pour le déclencheur.BEFORE|AFTER
: Le timing du déclencheur, qui détermine le moment où l'action du déclencheur est exécutée par rapport à l'événement déclencheur.INSERT|UPDATE|DELETE
: L'événement déclencheur qui active le déclencheur.ON nom_de_table
: Spécifie la table sur laquelle créer le déclencheur.FOR EACH ROW
: Modificateur facultatif pour les déclencheurs au niveau des lignes.trigger_body
: Le code qui sera exécuté lorsque le déclencheur est activé.
Cas pratique : Création d'un déclencheur
Voyons un exemple de création d'un déclencheur pour conserver l'historique des modifications du salaire d'un employé. Supposons que tu aies deux tables, l'une nommée "employés" et l'autre "employés_salaire_histoire". Chaque fois que le salaire d'un employé est mis à jour dans la table 'employees', nous voulons ajouter une nouvelle ligne dans la table 'employees_salary_history'. Voici le code SQL pour créer le déclencheur :CREATE TRIGGER trg_salary_history AFTER UPDATE OF salary ON employees FOR EACH ROW INSERT INTO employees_salary_history (employee_id, old_salary, new_salary, changed_on) VALUES (:old.employee_id, :old.salary, :new.salary, CURRENT_TIMESTAMP) ;Dans cet exemple, le déclencheur est nommé 'trg_salary_history', il est exécuté après une mise à jour de la colonne 'salary' dans la table 'employees', et c'est un déclencheur de niveau ligne, qui est spécifié par la clause 'FOR EACH ROW'. Lorsque le déclencheur s'exécute, il insère une nouvelle ligne dans le tableau 'employees_salary_history' avec l'id_employé, l'ancien_salaire, le nouveau_salaire et l'horodatage de la modification.
Modification et suppression des déclencheurs SQL
Une fois que tu as créé un déclencheur, tu peux avoir besoin de le modifier ou de le supprimer pour diverses raisons, comme la résolution de problèmes ou la suppression de fonctionnalités redondantes. Cette section décrit en détail la modification et la suppression des déclencheurs SQL.Modification d'un déclencheur SQL Exemple
Pour modifier un déclencheur, utilise la syntaxe "ALTER TRIGGER". Supposons que tu veuilles modifier le déclencheur 'trg_salary_history' pour enregistrer l'identifiant de la personne qui a effectué la mise à jour du salaire de l'employé. Pour ce faire, tu dois ajouter une nouvelle colonne 'updated_by' dans la table 'employees_salary_history' et modifier le déclencheur en conséquence. Voici le code SQL pour modifier le déclencheur afin d'inclure la colonne 'updated_by' :ALTER TRIGGER trg_salary_history AFTER UPDATE OF salary ON employees FOR EACH ROW INSERT INTO employees_salary_history (employee_id, old_salary, new_salary, changed_on, updated_by) VALUES (:old.employee_id, :old.salary, :new.salary, CURRENT_TIMESTAMP, USER) ;Ce code modifie le déclencheur 'trg_salary_history' en ajoutant 'updated_by' à l'instruction INSERT dans le corps du déclencheur.
Suppression d'un déclencheur SQL Exemple
Pour supprimer un déclencheur, utilise la syntaxe 'DROP TRIGGER'. Si tu détermines que le déclencheur 'trg_salary_history' n'est plus nécessaire et que tu veux le supprimer de la base de données, tu peux utiliser le code SQL suivant :DROP TRIGGER trg_salary_history ;
Ce code supprime le déclencheur 'trg_salary_history' de la base de données. Note que l'abandon d'un déclencheur n'affecte pas la table ou les données de la table, il supprime seulement la fonctionnalité du déclencheur.
Déclencheurs SQL et fonctions
Les déclencheurs et les fonctions SQL ont tous deux des objectifs spécifiques et sont des composants importants des systèmes de gestion de base de données. Cependant, ils diffèrent en termes de fonctionnalité, d'objectif et d'utilisation :Les déclencheurs SQL :
- S'exécutent automatiquement lorsqu'un événement spécifié se produit (par exemple, INSERT, UPDATE ou DELETE).
- Associés à une table ou à une vue spécifique.
- Principalement utilisés pour maintenir l'intégrité des données, appliquer les règles de gestion et vérifier les modifications des données.
- S'exécutent lorsqu'elles sont appelées explicitement, comme une fonction normale dans un langage de programmation.
- Elles renvoient une seule valeur ou un tableau.
- Utilisées pour effectuer des calculs, des analyses ou des manipulations de données sur des données d'entrée et renvoyer le résultat.
Quand utiliser les déclencheurs et quand utiliser les fonctions ?
Il est essentiel de déterminer le scénario d'utilisation approprié pour tirer le meilleur parti des déclencheurs et des fonctions SQL. Voici quelques directives générales sur le moment où il convient d'utiliser l'une et l'autre :- Utiliser les déclencheurs : Choisis les déclencheurs lorsque tu veux automatiser des tâches en réponse à des événements de manipulation de données, effectuer des contrôles de cohérence entre les tables ou conserver des enregistrements historiques.
- Utiliser les fonctions : Envisage les fonctions lorsque tu as besoin d'encapsuler une logique réutilisable, d'effectuer des calculs complexes ou de manipuler des données sans déclencher d'événement. Les fonctions doivent être utilisées lorsque la logique exige de la souplesse et ne dépend pas d'événements spécifiques aux tables.
Considérations sur les performances
Lorsque l'on compare les performances des déclencheurs et des fonctions SQL, certains facteurs doivent être pris en compte :- Les déclencheurs : Étant donné que les déclencheurs s'exécutent automatiquement, ils peuvent introduire une surcharge de traitement et ralentir les opérations de manipulation des données. Une utilisation excessive des déclencheurs ou la mise en œuvre d'une logique complexe dans les déclencheurs peut avoir un impact négatif sur les performances de la base de données.
- Les fonctions : Les fonctions peuvent être optimisées en termes de performances car elles sont appelées explicitement et leur temps d'exécution est généralement plus rapide. Cependant, des fonctions mal écrites peuvent également avoir un impact sur les performances globales du système si elles sont gourmandes en ressources ou si elles sont appelées fréquemment dans le cadre d'opérations de manipulation de données.
Recommandations pour l'utilisation des déclencheurs et des fonctions
Pour tirer le meilleur parti des déclencheurs et des fonctions SQL, respecte ces bonnes pratiques :- Déclencheurs :
- Évite d'utiliser trop de déclencheurs, car cela peut nuire aux performances de la base de données.
- La logique des déclencheurs doit être simple, propre et axée sur un seul objectif.
- Utilise les déclencheurs principalement pour renforcer l'intégrité et la cohérence des données entre les tables liées.
- Fonctions :
- Optimise les performances des fonctions en minimisant la consommation de ressources et en évitant les appels de fonctions imbriquées.
- Encapsule les calculs complexes et la logique de manipulation des données dans des fonctions pour une meilleure organisation et réutilisation du code.
- Utilise les fonctions intégrées autant que possible, car elles sont généralement plus efficaces que les fonctions définies par l'utilisateur.
Travailler avec les déclencheurs SQL Tables insérées
Une table insérée est une table temporaire en mémoire créée par le système de gestion de base de données (SGBD) chaque fois qu'un déclencheur est exécuté à la suite d'un événement INSERT, UPDATE ou DELETE. Les tables insérées contiennent les nouvelles valeurs mises à jour pour les opérations de manipulation des données et peuvent être consultées par le déclencheur pendant son exécution pour référencer ou comparer les données.
Objectif de la table insérée
Les tables insérées ont plusieurs objectifs dans le contexte des déclencheurs SQL, notamment :- Stocker de nouvelles valeurs pour les lignes insérées ou mises à jour, ce qui permet au déclencheur de référencer ou de comparer ces valeurs.
- Faciliter la mise en œuvre de la logique commerciale, de l'application des contraintes et des fonctions d'audit en fournissant un moyen d'examiner les modifications apportées.
- Améliorer l'intégrité des données en permettant au déclencheur de détecter les divergences entre les anciennes et les nouvelles valeurs de données et d'appliquer les actions appropriées avant de valider les modifications.
Utilisation des déclencheurs SQL Inserted Table
Lorsqu'un événement de manipulation de données se produit, le SGBD crée une table insérée et la remplit avec la ou les lignes mises à jour impliquées dans l'événement déclencheur. Le déclencheur peut ensuite accéder à la table insérée par le biais d'un mot-clé spécial "inserted". Cela permet au déclencheur de manipuler ou de comparer les nouvelles données avec les anciennes avant de valider ou d'annuler les modifications. Dans le cas de :- Opérations INSERT : La table insérée contient toutes les lignes nouvellement ajoutées.
- Opérations UPDATE : Le tableau inséré contient les lignes mises à jour avec leurs nouvelles valeurs.
- Opérations DELETE : La table insérée n'est pas utilisée, car les lignes supprimées sont stockées dans une autre table temporaire appelée table "supprimée".
Exemples pratiques avec les tables insérées des déclencheurs SQL
Voici quelques exemples d'utilisation des déclencheurs SQL.
Exemple : Enregistrement des modifications apportées à une table
Considérons un scénario dans lequel tu veux enregistrer les modifications apportées à la table des employés, en enregistrant le salaire mis à jour pour chaque employé concerné. Pour ce faire, crée un déclencheur qui utilise la table insérée pour extraire les nouvelles valeurs de salaire et les stocker dans une table d'audit distincte.CREATE TRIGGER trg_salary_log AFTER UPDATE OF salary ON employees FOR EACH ROW BEGIN INSERT INTO salary_audit (employee_id, old_salary, new_salary, modified_at) VALUES (:old.employee_id, :old.salary, :new.salary, CURRENT_TIMESTAMP) ; END;Dans cet exemple, le déclencheur trg_salary_log est activé après la mise à jour de la colonne salaire dans la table employees. Il insère ensuite une nouvelle ligne dans la table salary_audit, capturant l'id_employé, l'ancien_salaire, le nouveau_salaire et l'horodatage de la modification.
Exemple : Assurer l'intégrité des données avec les déclencheurs SQL insérés
Considère un scénario dans lequel tu as une table nommée "commandes" et une table nommée "produits", et tu veux t'assurer qu'une commande ne peut être passée que pour des produits disponibles avec un stock suffisant. Pour ce faire, il est possible de créer un déclencheur qui utilise la table insérée pour comparer les quantités de commande demandées avec le stock disponible dans la table des produits.CREATE TRIGGER trg_validate_order BEFORE INSERT ON orders FOR EACH ROW BEGIN DECLARE @stock INT ; SELECT stock INTO @stock FROM products WHERE product_id = :new.product_id ; IF @stock < :new.quantity THEN ROLLBACK ; -- Si la quantité demandée est supérieure au stock disponible, annuler la transaction RETURN ; END IF ; END ;Dans cet exemple, le déclencheur trg_validate_order est activé avant qu'une nouvelle ligne ne soit insérée dans la table des commandes. Il vérifie la quantité de commande demandée par rapport au stock disponible en utilisant les valeurs de la table insérée. Si la quantité demandée dépasse le stock disponible, la transaction est annulée, ce qui garantit l'intégrité des données dans la base de données.
Déclencheurs SQL - Principaux enseignements
Déclencheurs SQL : Objets de base de données nommés qui exécutent automatiquement des actions (INSERT, UPDATE, DELETE, TRUNCATE) lorsqu'un événement se produit sur une table ou une vue spécifiée, ce qui permet de maintenir l'intégrité des données dans les bases de données.
Concepts de base des déclencheurs SQL : Événement déclencheur (par exemple, INSERT, UPDATE, DELETE), Action déclencheuse (modifications de tables), Événement déclencheur (opérations de manipulation de données), Table déclencheuse (table en cours de modification).
Types de déclencheurs SQL : Before Triggers (avant l'événement déclencheur), After Triggers (après l'événement déclencheur), Row-Level Triggers (exécutés pour chaque ligne affectée), Statement-Level Triggers (exécutés une fois par événement).
Différence entre les déclencheurs SQL et les fonctions : Les déclencheurs sont automatiquement exécutés en réponse à des événements de manipulation de données, tandis que les fonctions sont explicitement appelées pour renvoyer des valeurs. Les déclencheurs assurent l'intégrité des données, tandis que les fonctions effectuent des calculs et des manipulations de données.
Déclencheurs SQL insérés : Table temporaire en mémoire créée pendant l'exécution du déclencheur, permettant au déclencheur de référencer et de comparer de nouvelles valeurs pour les opérations de manipulation des données, assurant ainsi l'intégrité des données.
Apprends plus vite avec les 13 fiches sur Déclencheurs SQL
Inscris-toi gratuitement pour accéder à toutes nos fiches.
Questions fréquemment posées en Déclencheurs SQL
À propos de StudySmarter
StudySmarter est une entreprise de technologie éducative mondialement reconnue, offrant une plateforme d'apprentissage holistique conçue pour les étudiants de tous âges et de tous niveaux éducatifs. Notre plateforme fournit un soutien à l'apprentissage pour une large gamme de sujets, y compris les STEM, les sciences sociales et les langues, et aide également les étudiants à réussir divers tests et examens dans le monde entier, tels que le GCSE, le A Level, le SAT, l'ACT, l'Abitur, et plus encore. Nous proposons une bibliothèque étendue de matériels d'apprentissage, y compris des flashcards interactives, des solutions de manuels scolaires complètes et des explications détaillées. La technologie de pointe et les outils que nous fournissons aident les étudiants à créer leurs propres matériels d'apprentissage. Le contenu de StudySmarter est non seulement vérifié par des experts, mais également régulièrement mis à jour pour garantir l'exactitude et la pertinence.
En savoir plus