Télécharger la présentation
La présentation est en train de télécharger. S'il vous plaît, attendez
Publié parLourdes Allain Modifié depuis plus de 9 années
1
Module 13 : Implémentation de déclencheurs
2
Vue d'ensemble Présentation des déclencheurs Définition de déclencheurs Exemples de déclencheurs Performances
3
Présentation des déclencheurs Caractéristiques d'un déclencheur Utilisation des déclencheurs Considérations relatives à l'utilisation des déclencheurs
4
Caractéristiques d'un déclencheur Association à une table Appel automatique Appel direct impossible Transaction
5
Utilisation des déclencheurs Modifications en cascade par le biais de tables connexes d'une base de données Application d'une intégrité des données plus complexe qu'une contrainte CHECK Définition de messages d'erreur personnalisés Mise à jour de données dénormalisées Comparaison des états précédents et suivants des données modifiées
6
Considérations relatives à l'utilisation des déclencheurs Les déclencheurs sont réactifs alors que les contraintes sont proactives Les contraintes sont contrôlées en premier Les tables peuvent disposer de plusieurs déclencheurs pour tout type d'opération Les propriétaires de tables doivent disposer d'autorisations Les déclencheurs ne peuvent pas être créés dans des vues ou des tables temporaires Les déclencheurs ne doivent pas renvoyer de jeux de résultats Les déclencheurs peuvent traiter des opérations multilignes
7
Définition de déclencheurs Création de déclencheurs Modification et suppression de déclencheurs Fonctionnement des déclencheurs
8
Création de déclencheurs Instruction CREATE TRIGGER Autorisations appropriées nécessaires Restrictions relatives aux instructions CREATE TRIGGER member_delete ON member FOR DELETE AS IF EXISTS (SELECT d.member_no FROM loan l INNER JOIN deleted d ON l.member_no = d.member_no ) BEGIN RAISERROR ( ' Member has Books Checked Out *** Cannot Delete ', 10, 1) ROLLBACK TRANSACTION END CREATE TRIGGER member_delete ON member FOR DELETE AS IF EXISTS (SELECT d.member_no FROM loan l INNER JOIN deleted d ON l.member_no = d.member_no ) BEGIN RAISERROR ( ' Member has Books Checked Out *** Cannot Delete ', 10, 1) ROLLBACK TRANSACTION END
9
Modification et suppression de déclencheurs Modification d'un déclencheur Changement de la définition sans suppression du déclencheur Activation ou désactivation d'un déclencheur Suppression d'un déclencheur ALTER TRIGGER loan_insert ON loan FOR INSERT AS UPDATE copy SET on_loan = ' y ' FROM copy INNER JOIN inserted ON copy.isbn = inserted.isbn AND copy.copy_no = inserted.copy_no ALTER TRIGGER loan_insert ON loan FOR INSERT AS UPDATE copy SET on_loan = ' y ' FROM copy INNER JOIN inserted ON copy.isbn = inserted.isbn AND copy.copy_no = inserted.copy_no
10
Fonctionnement des déclencheurs Fonctionnement d'un déclencheur INSERT Fonctionnement d'un déclencheur DELETE Fonctionnement d'un déclencheur UPDATE Fonctionnement des déclencheurs imbriqués Déclencheurs récursifs
11
Fonctionnement d'un déclencheur INSERT INSERT loan VALUES (603, 4, 11, 123, GETDATE(), (GETDATE() + 30)) INSERT loan VALUES (603, 4, 11, 123, GETDATE(), (GETDATE() + 30))loanloan isbn copy_no title_no mem_no outdate duedate 143143 143143 121121 121121 1001 1004 1002 1001 1004 1002 1001 1002 1003 1001 1002 1003 02/13/91 02/14/91 02/13/91 02/14/91 02/27/91 02/28/91 02/27/91 02/28/91 loanloan isbn copy_no title_no mem_no outdate duedate 14431443 14431443 11211121 11211121 1001 1004 1002 1001 1004 1002 1001 1002 1003 1001 1002 1003 02/13/91 02/14/91 02/13/91 02/14/91 02/27/91 02/28/91 02/27/91 02/28/91 4110041001 02/13/9102/27/91loanloan isbn copy_no title_no mem_no outdate duedate 14431443 14431443 11211121 11211121 1001 1004 1002 1001 1004 1002 1001 1002 1003 1001 1002 1003 02/13/91 02/14/91 02/13/91 02/14/91 02/27/91 02/28/91 02/27/91 02/28/91 603411123 02/15/9103/17/91 insertedinserted 603 4 4 11 123 02/15/91 03/17/91 Journalisation de l'instruction Insert Instruction INSERT sur une table, avec un déclencheur INSERT défini loanloan isbn copy_no title_no mem_no outdate duedate 14431443 14431443 11211121 11211121 1001 1004 1002 1001 1004 1002 1001 1002 1003 1001 1002 1003 02/13/91 02/14/91 02/13/91 02/14/91 02/27/91 02/28/91 02/27/91 02/28/91 603411123 02/15/9103/17/91 Exécution des opérations du déclencheur /* Code du déclencheur */ USE library CREATE TRIGGER loan_insert ON loan FOR INSERT AS UPDATE c SET on_loan = 'Y' FROM copy c INNER JOIN inserted I ON c.isbn = i.sbn and c.copy_no = i.copy_no /* Code du déclencheur */ USE library CREATE TRIGGER loan_insert ON loan FOR INSERT AS UPDATE c SET on_loan = 'Y' FROM copy c INNER JOIN inserted I ON c.isbn = i.sbn and c.copy_no = i.copy_no UPDATE c SET on_loan = 'Y' FROM copy c INNER JOIN inserted I ON c.isbn = isbn and c.copy_no = i.copy_nocopycopy isbn copy_no title_no on_loan 14431443 14431443 11211121 11211121 1001 1004 1002 1001 1004 1002 YYNNYYNN YYNNYYNN 603411Y Application d'une instruction INSERT à une table dans laquelle un déclencheur INSERT est défini Journalisation d'une instruction INSERT Exécution des opérations du déclencheur 11 22 33
12
DELETE loan WHERE isbn = 4 AND copy_no = 1 DELETE loan WHERE isbn = 4 AND copy_no = 1 Fonctionnement d'un déclencheur DELETE Instruction DELETE sur une table, avec un déclencheur DELETE définiloanloan isbn copy_no title_no mem_no outdate duedate 14431443 14431443 11211121 11211121 1001 1004 1002 1001 1004 1002 1001 1002 1003 1001 1002 1003 02/13/91 02/14/91 02/13/91 02/14/91 02/27/91 02/28/91 02/27/91 02/28/91 4110041001 02/13/9102/27/91 loanloan isbn copy_no title_no mem_no outdate duedate 14431443 14431443 11211121 11211121 1001 1004 1002 1001 1004 1002 1001 1002 1003 1001 1002 1003 02/13/91 02/14/91 02/13/91 02/14/91 02/27/91 02/28/91 02/27/91 02/28/91 4110041001 02/13/9102/27/91loanloan isbn copy_no title_no mem_no outdate duedate 143143 143143 121121 121121 1001 1004 1002 1001 1004 1002 1001 1002 1003 1001 1002 1003 02/13/91 02/14/91 02/13/91 02/14/91 02/27/91 02/28/91 02/27/91 02/28/91 DeletedDeleted 4 4 1 1 1004 1001 02/13/91 02/27/91 Journalisation de l'instruction DELETE Exécution des opérations du déclencheur USE library CREATE TRIGGER loan_delete ON loan FOR DELETE AS UPDATE c SET on_loan = 'N' FROM copy c INNER JOIN deleted d ON c.isbn = d.isbn AND c.copy_no = d.copy.no USE library CREATE TRIGGER loan_delete ON loan FOR DELETE AS UPDATE c SET on_loan = 'N' FROM copy c INNER JOIN deleted d ON c.isbn = d.isbn AND c.copy_no = d.copy.no copycopy isbn copy_no title_no on_loan 14431443 14431443 11211121 11211121 1001 1004 1002 1001 1004 1002 YYNNYYNN YYNNYYNN 411004N UPDATE c SET on_loan = 'N' FROM copy c INNER JOIN deleted d ON c.isbn = d.isbn AND c.copy_no = d.copy.no Application d'une instruction DELETE à une table dans laquelle un déclencheur DELETE est défini Journalisation d'une instruction DELETE Exécution des opérations du déclencheur 11 22 33
13
Fonctionnement d'un déclencheur UPDATE Instruction UPDATE sur une table, avec un déclencheur UPDATE défini UPDATE member SET member_no = 10021 WHERE member_no = 1234 UPDATE member SET member_no = 10021 WHERE member_no = 1234 Instruction UPDATE journalisée en tant qu'instructions INSERT et DELETEmembermember member_no lastname firstname middleinitial photograph 10020 10021 10022 10023 10020 10021 10022 10023 Anderson Barr Anderson Barr Anderson Andrew Bill Andrew Bill A R NULL B A R NULL B ~~~ 1234BarrAndrewR ~~~ insertedinserted 10021 Barr Andrew R R ~~~ deleteddeleted 1234 Barr Andrew R R ~~~ Exécution des opérations du déclencheur USE library GO CREATE TRIGGER member_update ON member FOR UPDATE AS IF UPDATE (member_no) BEGIN RAISERROR ('La transaction ne peut pas être traitée.\ ***** Impossible de modifier le numéro d''abonné.', 10, 1) ROLLBACK TRANSACTION USE library GO CREATE TRIGGER member_update ON member FOR UPDATE AS IF UPDATE (member_no) BEGIN RAISERROR ('La transaction ne peut pas être traitée.\ ***** Impossible de modifier le numéro d''abonné.', 10, 1) ROLLBACK TRANSACTION AS IF UPDATE (member_no) BEGIN RAISERROR ('La transaction ne peut pas être traitée.\ ***** Impossible de modifier le numéro d''abonné.', 10, 1) ROLLBACK TRANSACTION La transaction ne peut pas être traitée. ***** Impossible de modifier le numéro d'abonné. La transaction ne peut pas être traitée. ***** Impossible de modifier le numéro d'abonné. membermember member_no lastname firstname middleinitial photograph 10020 10021 10022 10023 10020 10021 10022 10023 Anderson Barr Anderson Barr Anderson Andrew Bill Andrew Bill A R NULL B A R NULL B ~~~ 1234BarrAndrewR ~~~ Application d'une instruction UPDATE à une table dans laquelle un déclencheur UPDATE est défini Journalisation d'une instruction UPDATE dans le cadre des instructions INSERT et DELETE Exécution des opérations du déclencheur 11 22 33
14
Fonctionnement des déclencheurs imbriqués L'article doit être rendu le 22/05/98 loan_update Exécution du déclencheur Loan_update Exécution d'une instruction UPDATE dans la table Copy copy_update loanloan isbn copy_no title_no mem_no outdate duedate 14431443 14431443 11211121 11211121 1001 1004 1002 1001 1004 1002 1001 1002 1003 1001 1002 1003 02/13/91 02/14/91 02/13/91 02/14/91 02/27/91 02/28/91 02/27/91 02/28/91 4110041001 02/13/9102/27/91 copycopy isbn copy_no title_no on_loan 14431443 14431443 11211121 11211121 1001 1004 1002 1001 1004 1002 YYNNYYNN YYNNYYNN 411004Y Exécution du déclencheur Copy_update Envoi d'un message
15
Déclencheurs récursifs Activation d'un déclencheur récursif Types de déclencheurs récursifs Raisons motivant l'utilisation de déclencheurs récursifs Permettent de gérer des relations complexes Nécessitent un contrôle final de la récursivité dans la définition du déclencheur
16
Exemples de déclencheurs Application de l'intégrité des données Application de règles de fonctionnement
17
Application de l'intégrité des données CREATE TRIGGER reservation_delete ON loan FOR INSERT AS IF (SELECT r.member_no FROM reservation r JOIN inserted i ON r.member_no = i.member_no AND r.isbn = i.isbn ) > 0 BEGIN DELETE r FROM reservation r INNER JOIN inserted i ON r.member_no = i.member_no AND r.isbn = i.isbn END loanloan isbn copy_no mem_no 1443114431 1443114431 1121211212 1121211212 1743117431 1743117431 417 Ligne insérée reservationreservation isbn 1123411234 1123411234 4 mem_no 1211712117 1211712117 7 log_date 07/14/98 07/12/98 06/07/98 07/14/98 07/12/98 06/07/98 07/14/98 remarks ~~~ Ligne supprimée par le déclencheur
18
Application de règles de fonctionnement ' Transaction cannot be processed ' ' This member still has books on loan ' ' Transaction cannot be processed ' ' This member still has books on loan 'membermember member_no lastname firstname 12341234 12341234 Anderson Barr Anderson Barr Anderson Andrew Bill Andrew Bill 2BarrAndrew Impossible de supprimer les abonnés qui ont encore des livres en leur possession IF (Select Count (*) FROM loan INNER JOIN deleted ON loan.member_no = deleted.member_no) > 0 ROLLBACK TRANSACTION IF (Select Count (*) FROM loan INNER JOIN deleted ON loan.member_no = deleted.member_no) > 0 ROLLBACK TRANSACTION Instruction DELETE exécutée dans la table Member Contrôle de la table Loan par le code du déclencheurloanloan isbn copy_no title_no mem_no 14431443 14431443 11211121 11211121 14431443 14431443 11231123 11231123 2 Transaction annulée Transaction annuléemembermember member_no lastname firstname 134134 134134 Anderson Barr Anderson Barr Anderson Andrew Bill Andrew Bill membermember member_no lastname firstname 12341234 12341234 Anderson Barr Anderson Barr Anderson Andrew Bill Andrew Bill 2BarrAndrew
19
Performances Les déclencheurs s'exécutent rapidement, car les tables Inserted et Deleted figurent dans la mémoire cache Le temps d'exécution est déterminé par : le nombre de tables spécifiées le nombre de lignes concernées Les opérations contenues dans les déclencheurs font implicitement partie d'une transaction
20
Conseils pratiques Simplifiez au maximum les définitions Évitez d'utiliser les instructions ROLLBACK dans les déclencheurs Utilisez des déclencheurs uniquement en cas de nécessité Prévoyez un contrôle final de la récursivité dans les déclencheurs récursifs
21
Atelier 13.1: Création de déclencheurs
22
Contrôle des acquis Présentation des déclencheurs Définition de déclencheurs Exemples de déclencheurs Performances
Présentations similaires
© 2024 SlidePlayer.fr Inc.
All rights reserved.