Module 13 : Implémentation de déclencheurs. Vue d'ensemble Présentation des déclencheurs Définition de déclencheurs Exemples de déclencheurs Performances.

Slides:



Advertisements
Présentations similaires
TRANSACTION Problèmes posés
Advertisements

! ! ! PROCEDURE TYPE POUR ORGANISER L ’ANONYMAT
INTEGRITE ET BD ACTIVES
Année universitaire Système dinformation Le SQL (Structured Query Language) langage dinterrogation dune base de données.
LE LANGAGE SQL : LDD La création de tables L’ordre CREATE CREATE TABLE nom_de_table (Nom_colonne Type_colonne, Nom_colonne Type_colonne,
1 ARCHITECTURE DACCÈS la méthode générale modèle de données définitions module daccès / modules métiers construction des modèles les modules daccès, les.
LMD: Langage de Manipulation de Données
AYARI Mejdi Formation 2121 * ISD * 1 tructured uery Anguage 2006.
Contrôles d'accès aux données
T ECHNOLOGIES O RACLE Manipulation des données © sebvita.com.
TRANSACTION : confirmation, annulation. transactions : début transactionSET TRANSACTION SAVEPOINT annulerROLLBACK fin transactionCOMMIT.
Module 6 : Gestion de données à l'aide du système de fichiers NTFS
Module 6 : Gestion de données à l'aide du système de fichiers NTFS
L’utilisation des bases de données
F Copyright © Oracle Corporation, Tous droits réservés. Créer des programmes avec Procedure Builder.
EPID-CPI-ISAIP Philippe Bancquart - mise à jour 24/02/ page 1 Procédures stockées CPI-SQLServer.
SQL: Contraintes et Triggers
Module 5 : Gestion de l'accès aux ressources à l'aide de groupes
Christine Bonnet SOURCES : « Samples » dOracle, « Oracle 8 » R. Chapuis PRO*C – C ++
Les transactions.
EPID-CPI-ISAIP Philippe Bancquart - mise à jour 24/02/ page 1 SQL jointure PHILIPPE BANCQUART.
Introduction.
 CREATE TABLE  DROP TABLE  ALTER TABLE  INSERT  UPDATE  DELETE  SELECT interrogation 2 Instruction de mise à jour structure.
EPID-CPI-ISAIP Philippe Bancquart - mise à jour 24/02/ page 1 Transac SQL Intégrité des données.
JDBC L'API JDBC est utilisée pour utilisée pour intéragir avec une base de données.
Analyse et Conception de Systèmes Informatiques (ACSI)
Créer des déclencheurs de base de données
Objectifs A la fin de ce chapitre, vous pourrez : présenter l'utilisation d'opérations de chargement de données par chemin direct décrire l'utilisation.
Créer des packages.
Module 12 : Implémentation de procédures stockées.
INTEGRITE ET BD ACTIVES
Surveiller et résoudre le conflit de verrouillage
Introduction à Microsoft Access Rachid Kadouche 420-EDB-03 Hiver EDB-03 Rachid Kadouche.
Les utilisateurs potentiels : Les administrateurs de bases de données, Les développeurs, Le support et les opérations, Les architectes, Les analystes.
Module 9 : Transfert de données. Vue d'ensemble Présentation du transfert de données Outils d'importation et d'exportation de données disponibles dans.
Module 4 : Gestion de la sécurité. Vue d'ensemble Implémentation d'un mode d'authentification Attribution de comptes de connexion à des utilisateurs et.
(Procedural Language / Structured Query Language)
Ait Ahmed Madjid Cohen Lior Jaballah Seddik Leborgne Fabien
Manipulation des Données
Module 7 : Utilisation de requêtes élaborées
DEFINITION DES DONNEES : schéma conceptuel. Schéma conceptuel instructiondescription CREATE TABLEcréation d'une relation ALTER TABLEmodification de la.
Module 4 : Implémentation de l'intégrité des données.
Structure de stockage et relations
Gérer les rôles.
Les Contraintes.
SQL : Langage de Manipulation des données
21/04/2015© Robert Godin. Tous droits réservés.1 6Gestion des contraintes d’intégrité en SQL n Contrainte d'intégrité statique – respectée pour chacun.
Quinio1 Bases de données : modèlisation et SGBD Séance 3 B Quinio.
Module 1 : Vue d'ensemble de Microsoft SQL Server
3 Copyright © Oracle Corporation, Tous droits réservés. Créer des fonctions.
4 Copyright © Oracle Corporation, Tous droits réservés. Gérer les sous-programmes.
13 Copyright © Oracle Corporation, Tous droits réservés. Gérer l'intégrité des données.
Définition des contraintes Vérification des contraintes Triggers
Les bases de données Séance 8 Jointures.
Module 11 : Implémentation de vues. Vue d'ensemble Présentation d'une vue Avantages liés aux vues Définition de vues Modification de données à l'aide.
Le Langage de Manipulation de Données LMD. 2 Les ordres SQL de manipulation INSERT –Insertion (ajout) de ligne(s) dans une table –Utiliser SQL*LOAD pour.
Séance /10/2004 SGBD - Approches & Principes.
Initiation aux bases de données et à la programmation événementielle
NIVEAU LOGIQUE Vues. Fenêtre dynamique sur la base Ses données proviennent d'autres tables ou d'autres vues.
Nicolas Ribot Introduction aux triggers Nicolas Ribot - Licence GNU FDL - Version 1.1.
INTRODUCTION AUX BASES DE DONNEES Base et métabase
Cours n°2 Implémentation et exploitation
Les vues, indexes, séquences.  Qu’est ce qu’une vue 1. Une vue est une vision partielle ou particulière des données d'une ou plusieurs tables de la base.
Le Langage de Manipulation de Données LMD Module 6.
Le langage SQL LA Plan 1. Introduction Rappels sur le modèle relationnel Les caractéristiques du langage SQL 2. Le Langage d'Interrogation des.
SQL Partie 2. SQL est un langage de manipulation de données SQL est un langage de manipulation de données (LMD), cela signifie qu'il permet de sélectionner,
Modélisation et utilisation Aurélien Marion1 Aurélien Marion
De Arnault Chazareix :
1 Les bases de données Séance 5 -- Le Langage de Définition de Données ou la manœuvre de la structure de la base -- Le Langage de Manœuvre de Données.
Transcription de la présentation:

Module 13 : Implémentation de déclencheurs

Vue d'ensemble Présentation des déclencheurs Définition de déclencheurs Exemples de déclencheurs Performances

 Présentation des déclencheurs Caractéristiques d'un déclencheur Utilisation des déclencheurs Considérations relatives à l'utilisation des déclencheurs

Caractéristiques d'un déclencheur Association à une table Appel automatique Appel direct impossible Transaction

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

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

 Définition de déclencheurs Création de déclencheurs Modification et suppression de déclencheurs Fonctionnement des déclencheurs

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

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

 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

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 /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 /13/91 02/14/91 02/13/91 02/14/91 02/27/91 02/28/91 02/27/91 02/28/ /13/9102/27/91loanloan isbn copy_no title_no mem_no outdate duedate /13/91 02/14/91 02/13/91 02/14/91 02/27/91 02/28/91 02/27/91 02/28/ /15/9103/17/91 insertedinserted /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 /13/91 02/14/91 02/13/91 02/14/91 02/27/91 02/28/91 02/27/91 02/28/ /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 YYNNYYNN YYNNYYNN Y 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

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 /13/91 02/14/91 02/13/91 02/14/91 02/27/91 02/28/91 02/27/91 02/28/ /13/9102/27/91 loanloan isbn copy_no title_no mem_no outdate duedate /13/91 02/14/91 02/13/91 02/14/91 02/27/91 02/28/91 02/27/91 02/28/ /13/9102/27/91loanloan isbn copy_no title_no mem_no outdate duedate /13/91 02/14/91 02/13/91 02/14/91 02/27/91 02/28/91 02/27/91 02/28/91 DeletedDeleted /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 YYNNYYNN YYNNYYNN N 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

Fonctionnement d'un déclencheur UPDATE Instruction UPDATE sur une table, avec un déclencheur UPDATE défini UPDATE member SET member_no = WHERE member_no = 1234 UPDATE member SET member_no = WHERE member_no = 1234 Instruction UPDATE journalisée en tant qu'instructions INSERT et DELETEmembermember member_no lastname firstname middleinitial photograph Anderson Barr Anderson Barr Anderson Andrew Bill Andrew Bill A R NULL B A R NULL B ~~~ 1234BarrAndrewR ~~~ insertedinserted 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 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

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 /13/91 02/14/91 02/13/91 02/14/91 02/27/91 02/28/91 02/27/91 02/28/ /13/9102/27/91 copycopy isbn copy_no title_no on_loan YYNNYYNN YYNNYYNN Y Exécution du déclencheur Copy_update Envoi d'un message

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

 Exemples de déclencheurs Application de l'intégrité des données Application de règles de fonctionnement

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 Ligne insérée reservationreservation isbn mem_no 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

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 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 Transaction annulée Transaction annuléemembermember member_no lastname firstname Anderson Barr Anderson Barr Anderson Andrew Bill Andrew Bill membermember member_no lastname firstname Anderson Barr Anderson Barr Anderson Andrew Bill Andrew Bill 2BarrAndrew

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

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

Atelier 13.1: Création de déclencheurs

Contrôle des acquis Présentation des déclencheurs Définition de déclencheurs Exemples de déclencheurs Performances