A triggerek tárolt eljárások, melyek elsüt események hatására indulnak. Ilyen elsüt esemény lehet egy táblára vonatkozó INSERT parancs DELETE parancs

Hasonló dokumentumok
SQL DDL-2 (aktív elemek) triggerek

Relációsémák létrehozása SQL nyelvben

Adatbázis kezelés Delphiben. SQL lekérdezések

Tranzakciókezelés PL/SQL-ben

Adatbázis Rendszerek II. 6. PLSQL Triggerek 32/1B IT MAN

A trigger egy aktualizálási művelet esetén végrehajtandó programrészletet definiál. Alakja:

SQL jogosultság-kezelés. Privilégiumok Grant és Revoke Grant Diagrammok

Adatbázisok. 8. gyakorlat. SQL: CREATE TABLE, aktualizálás (INSERT, UPDATE, DELETE), SELECT október október 26. Adatbázisok 1 / 17

SQL DDL-1: táblák és megszorítások

Adatbázis tartalmának módosítása

SQL ALAPOK. Bevezetés A MYSQL szintaxisa Táblák, adatok kezelésének alapjai

B I T M A N B I v: T M A N

SQL DDL: Táblák, megszorítások (constraints), triggerek, nézettáblák

OO PDO. Tehát PDO használatával, könnyen átállhatunk egy másik adatbáziskezelőre, anélkül hogy a kódot teljes egészében újraírnánk.

Sapientia - Erdélyi Magyar TudományEgyetem (EMTE) ABR 2( Adatbázisrendszerek 2) 1. Előadás: Celko Joe tippjei Codd törvényei.

Az SQL adatbázisnyelv: DML

Triggerek. Olyan névvel ellátott adatbázisobjektumok, amelyek eseményorientált feldolgozást tesznek lehetővé

Nézetek és indexek. 8. fejezet Nézettáblák

Java és web programozás

Nézetek és indexek. AB1_06C_Nézetek_Indexek - Adatbázisok-1 EA (Hajas Csilla, ELTE IK) - J.D. Ullman elıadásai alapján

Informatikai képzés Információs rendszerek dr. Hajas Csilla (ELTE IK)

SQL haladó. Külső összekapcsolások, Csoportosítás/Összesítés, Beszúrás/Törlés/Módosítás, Táblák létrehozása/kulcs megszorítások

Adatbázisok. 9. gyakorlat SQL: SELECT október október 26. Adatbázisok 1 / 14

A gyakorlat során MySQL adatbázis szerver és a böngészőben futó phpmyadmin használata javasolt. A gyakorlat során a következőket fogjuk gyakorolni:

SQL. Táblák összekapcsolása lekérdezéskor Aliasok Allekérdezések Nézettáblák

B I T M A N B I v: T M A N

Adatbázisok elmélete 10. előadás

ADATBÁZIS-KEZELÉS FÉLÉVES FELADAT

Vizuális programozás gyakorlat

7. fejezet Kulcsok és idegen kulcsok

Adatbázisok elmélete 9. előadás

Az SQL*Plus használata

Adatbázisok biztonsága

Adatbázisok elmélete 9. előadás

Indexek és SQL hangolás

Adatbázisok-1 előadás Előadó: dr. Hajas Csilla

AB1 ZH mintafeladatok. 6. Minősítse az állításokat! I-igaz, H-hamis

Adatbázis Rendszerek I. 10. SQL alapok (DML esettanulmány)

Készítette: Szabóné Nacsa Rozália

Tartalomjegyzék. Tartalomjegyzék 1. Az SQL nyelv 1 Az SQL DDL alapjai 2

A könyv tartalomjegyzéke

8. Gyakorlat SQL. DDL (Data Definition Language) adatdefiníciós nyelv utasításai:

Megszorítások. AB1_06A_Megszorítások - Adatbázisok-1 EA (Hajas Csilla, ELTE IK) - J.D. Ullman elıadásai alapján

LBRA6i integrált rendszer

Bevezetés: az SQL-be

Java és web programozás

Adatbázis rendszerek SQL nyomkövetés

Adatbázis-lekérdezés. Az SQL nyelv. Makány György

Az SQL lekérdeznyelv

Adatbázis, adatbázis-kezelő

Adatbázisok tavaszi félév Vizsgatételsor

Az SQL nyelv Structured Query Language (Struktúrált lekérdező nyelv)

Adatbázisok. 8. gyakorlat. SQL: CREATE TABLE, aktualizálás (INSERT, UPDATE, DELETE) október október 22. Adatbázisok 1 / 14

Adatbázisok. 2. gyakorlat SQL november november 12. Adatbázisok 1 / 31

9.előadás: Adatbázisok-I. dr. Hajas Csilla (ELTE IK)

ADATBÁZIS-KEZELÉS - BEVEZETŐ - Tarcsi Ádám, ade@inf.elte.hu

A relációs adatbáziskezelés szabványos nyelve Két fő csoportba sorolhatók az utasításai

Adattípusok. Max. 2GByte

SQL. 1.rész. 1.elıadás // Adatbázisok-1 elıadás // Ullman-Widom (Stanford) tananyaga alapján // Hajas Csilla (ELTE IK) 1

Adatbázisok elmélete 11. előadás

Elemi alkalmazások fejlesztése IV.

Adattípusok. Max. 2GByte

Adatbázis Rendszerek II. 2. Ea: Gyakorló környezet

Adatbázis Rendszerek II. 2. Gyakorló környezet

Együttes hozzárendelés

IBM WebSphere Adapters 7. változat 5. alváltozat. IBM WebSphere Adapter for Oracle E-Business Suite felhasználói kézikönyv 7. változat 5.

Adatbázis Rendszerek II. 8. Gyakorló környezet

Adatbázisok* tulajdonságai

ADATBÁZISOK gyakorlat: SQL 2. rész SELECT

Gyakorlás: Hozzunk létre egy Alkalmazottak táblát AZO szám, Részleg szöveg, Munkakör szöveg és BelépésDátuma dátum típussal.

Táblakezelés: Open SQL Internal table. Tarcsi Ádám: Az SAP programozása 1.

MS ACCESS 2010 ADATBÁZIS-KEZELÉS ELMÉLET SZE INFORMATIKAI KÉPZÉS 1

Adatbázisok webalkalmazásokban

Programozás. Adatbázis-kezelés (alapok) Fodor Attila

SQL*Plus. Felhasználók: SYS: rendszergazda SCOTT: demonstrációs adatbázis, táblái: EMP (dolgozó), DEPT (osztály) "közönséges" felhasználók

Kilencedik témakör: Lazarus-Firebird. Készítette: Dr. Kotsis Domokos

SQL PÉLDATÁR. készült a PTE TTK Iskolai informatika III. kurzus teljesítésére

Adatok szűrése, rendezése

WHERE záradék (további lehetıségek) SQL specialitások, nem írhatók át relációs algebrába: LIKE. NULL értékek. Az ismeretlen (unknown) igazságérték

Dr. Pál László, Sapientia EMTE, Csíkszereda WEB PROGRAMOZÁS 4.ELŐADÁS. Adatbázis alapú alkalmazások készítése PHP-ben

Adatbázisok-I. előadás dr. Hajas Csilla (ELTE IK)

8.Előadás Adatbázisok-I. dr. Hajas Csilla (ELTE IK)

A gyakorlat során MySQL adatbázis szerver és a böngészőben futó phpmyadmin használata javasolt. A gyakorlat során a következőket fogjuk gyakorolni:

Adatbázisok I. Definíció: DDL: - objektum létrehozás CREATE - objektum megszüntetés DROP - objektum módosítás ALTER

Debreceni Egyetem Informatikai Kar TANULÓI NYILVÁNTARTÓ SZOFTVER FIREBIRD ADATBÁZIS ALKALMAZÁSÁVAL

Célkitűzések Az Oracle10 g felépítésének, használatának alapszíntű megismerése

Kalmár György Adatbázis alapú rendszerek

Adatbázis I. 11. előadás. Kulcsok az SQL ben. Hivatkozásépségi megszorítások és idegen kulcsok.

Adatbázis használat I. 5. gyakorlat

Lekérdezések az SQL SELECT utasítással. Copyright 2004, Oracle. All rights reserved.

Fájlszervezés. Adatbázisok tervezése, megvalósítása és menedzselése

Lekérdezések az SQL SELECT utasítással

Adatbázis-kezelés. Harmadik előadás

LOGISZTIKAI ADATBÁZIS RENDSZEREK JOIN, AGGREGÁCIÓ

Adatbázis tartalmának módosítása (DML), az adatbázis-kezelı rendszerek felépítése,

Kivételkezelés 2. SQLCODE lehetséges értékei:

BGF. 4. Mi tartozik az adatmodellek szerkezeti elemei

Adatbázisok-I. előadás dr. Hajas Csilla (ELTE IK)

Adatbázisok elleni fenyegetések rendszerezése. Fleiner Rita BMF/NIK Robothadviselés 2009

Adabáziselérés ODBC-n keresztül utasításokkal C#-ban

Átírás:

Triggerek A megszorítások által kért ellenrzést a rendszer akkor hajtja végre, ha az adat, melyre a megszorítás vonatkozik megváltozik. (SQL2) Az SQL3 további lehetségeket ad az adatbázisba tárolásra kerül adatok helyességének az ellenrzésére. Ezek közül a triggerek már sok kereskedelmi rendszerben meg is vannak valósítva, pl. Oracle, MS SQL Server. A trigger szó jelentése: elsüt, kivált.

A triggerek tárolt eljárások, melyek elsüt események hatására indulnak. Ilyen elsüt esemény lehet egy táblára vonatkozó INSERT parancs DELETE parancs UPDATE parancs. Az ABKR felismeri az adott helyzeteket és meghívja a triggert. Egy trigger mindig egy táblára vonatkozik. Azokat az adatbázisokat, melyekben triggerek is implementálva vannak aktív adatbázisoknak nevezzük.

Trigger 3 részbl áll esemény (event) egy táblára vonatkozó beszúrás, törlés vagy módosítás. feltétel (condition) a triggert végrehajtja a rendszer, ha a feltétel igaz. Ha a megadott feltétel nem igaz, nem történik semmi a triggerrel összefüggésben. mvelet (action) egy eljárás, melyet végrehajt a rendszer amikor a trigger aktiválva van és a feltétel igaz.

a mvelet akár megakadályozhatja a kiváltó esemény megtörténtét vagy meg nem történtté teheti azt (pl. kitörölheti az épp felvitt sorokat); a trigger mvelet része hivatkozhat a triggert kiváltó parancs által módosított sorok régi és új értékeire, végrehajthat új lekérdezéseket, változtathatja az adatbázist. végrehajthat adatdefiníciós parancsokat (új táblákat hozhat létre, megváltoztathatja a hozzáférési jogokat).

A triggerek segítségével megoldható feladatok: automatikusan generálhatók származtatott oszlop értékek; hivatkozási épség megszorítások osztott adatbázis esetén; komplex logikai összefüggések programozhatók; átlátszóan megoldható az események naplózása; másolt táblák osztott adatbázisok esetén megoldhatók; statisztikákat készíthetünk a táblához való hozzáférésrl; triggerek segíthetnek a biztonság ellenrzésében, bejegyezni egy táblába ki milyen táblákon végzett valamilyen mveletet.

A trigger számos lehetséget kínál a programozónak: a mveletet végrehajthatjuk a kiváltó esemény eltt (BEFORE), után (AFTER) vagy helyette (INSTEAD OF); INSERT trigger mvelete hivatkozhat a mveletet kiváltó esemény által beszúrt sorok új értékeire; DELETE trigger mvelete hivatkozhat a törölt sorok régi értékeire; UPDATE trigger mvelete hivatkozhat a törölt sorok módosított sorok régi és új értékeire;

ha az esemény módosítás, akkor megadhatunk egy bizonyos oszlopot vagy oszlopokat, amelyre az esemény vonatkozik; a WHEN záradékban megadhatuk egy feltételt, és a mveletet csak akkor hajtja végre a rendszer, ha a trigger aktívvá válik és a kiváltó esemény bekövetkezésekor a feltétel igaz; a programozó megadhatja, hogy a mvelet végrehajtása o minden módosított sorra egyszer (FOR EACH ROW); o egy adatbázis-mvelet által módosított összes sorra vonatkozóan egyszer történjen (alapértelmezés szerint);

Példa: egy SQL3 szintaxissal megírt triggerre: CREATE TRIGGER Részl9Trigger AFTER UPDATE OF Fizetés ON Alkalmazottak REFERENCING OLD AS Régi, NEW AS Uj WHEN (Régi.Fizetés > Uj.Fizetés and Uj.RészlegID = 9) UPDATE Alkalmazottak SET Fizetés = Régi.Fizetés WHERE SzemSzám = Uj.SzemSzám FOR EACH ROW

különbség az utasítás szint és sor szint triggerek között akkor látszik, ha egy kiváltó esemény több sorra is vonatkozik példa: UPDATE mvelet egy tábla több sorát is módosítja, nem csak egyet. az utasítás szint trigger csak egyszer kerül végrehajtásra hivatkozni tudunk a módosítás eltti értékekre a régi sorok halmazának (OLD_TABLE) a segítségével; a módosítás utáni értékekre, az új sorok halmazával (NEW_TABLE).

Ha trigger sor szint, akkor a trigger mvelet része minden sorra végrehajtódik. ha a kiváltó esemény beszúrás, akkor a beszúrt sornak a NEW AS záradék segítségével adhatunk nevet. törlés esetén az OLD AS záradék segítségével nevezhetjük el a törölt sort. ha a kiváltó esemény a módosítás, a rendszer a módosítás eltti sort tekinti régi sornak, a módosítás utánit pedig újnak.

Az utasítás szint trigger hasznos, ha a trigger mvelet része nem függ a kiváltó esemény által érintett sorok értékeitl, Példa: biztonsági ellenrzés az aktuális felhasználóra vonatkozóan. generál egy sort a kiváltó eseményre vonatkozóan. példa Utasítás szint trigger SQL3-ban:

CREATE TRIGGER set_count AFTER INSERT ON Diakok /*event*/ REFERENCING NEW TABLE AS InsertedTuples FOR EACH STATEMENT INSERT INTO StatisticTable(ModifiedTable, ModificationType, Count) SELECT Diakok, Insert, count (*) FROM InsertedTuples I WHERE I.age <18

Egy trigger lehet: Sor szint és kiváltó esemény eltt kerül végrehajtásra, amikor is mieltt módosítaná a kiváltó esemény által érintett sorokat és mieltt ellenrizné az összes helyességi megszorítást, végrehajtja a trigger mvelet részét, ha a trigger feltétel része igaz. Utasítás szint és kiváltó esemény eltt kerül végrehajtásra. Ebben az esetben mieltt végrehajtaná a triggert kiváltó eseményt, végrehajtja a trigger mveletét.

Sor szint és kiváltó esemény után kerül végrehajtásra. Miután módosítja a kiváltó esemény által érintett sorokat és ellenrzi a helyességi megszorításokat, végrehajtja a trigger mvelet részét az aktuális sorra, ha a feltétel igaz. Ellentétben a BEFORE triggerekkel, az AFTER trigger esetén a rendszer lezárja a sorokat. (Lásd lezárás a fejezetben) Utasítás szint és kiváltó esemény után kerül végrehajtásra. Ebben az esetben a kiváltó esemény után ellenrzi a helyességi megszorításokat, majd végrehajtja a trigger mveleti részét.

Triggerek tervezése A trigger egy ers mehanizmus, hogy az adatbázisban végzett módosításokat könnyebben tudjuk feldolgozni, de elvigyázatosan kell használni ket. Triggerek halmazának a hatása lehet nagyon komplex, egy aktív adatbázis karbantartása nehézzé válhat. Ha egy parancs egynél több trigger-t aktivál, az ABKR mindegyiket végrehajtja, tetszleges sorrendben. Sokszor nem tudhatjuk, a trigger mely program mellékhatásaként lett végrehajtva.

Fontos, hogy egy trigger mvelet része aktiválhat egy másik triggert. Sajátos esetben elfordulhat, hogy ismét aktiválja az elz triggert ezeket rekurzív triggereknek nevezik. Az ilyen lánc aktiválásakor mivel nem tudjuk, hogy az ABKR milyen sorrendben hajtja ket végre, nehezen lehet eldönteni, hogy mi lesz az összhatásuk.

A triggerek tervezése esetén vegyük figyelembe a következ irányelveket: Ne írjunk triggereket olyan tevékenységre, melyre a megszorítások adnak lehetséget. (például hivatkozási épség megszorítás). Korlátozzuk a triggert legfeljebb 60 sorra. Ha több mveletre is szükségünk van, helyezzük azokat egy tárolt eljárásba és hívjuk meg a triggerbl a tárolt eljárást. Ne tervezzünk rekurzív triggereket.

Használjuk mértékkel a triggereket, gondoljunk arra, hogy minden egyes adatkezelési mvelet esetén meghívásra kerülnek, és nagyon sok munkát igényelhetnek. Csak olyan mveletek elvégzésére használjuk, azaz a globális mveletekre, melyek minden felhasználó esetében szükségesek.

Megszorítások triggerekkel szemben: Triggereket is azért találták ki, hogy az adatbázis konzisztens maradjon. A helyességi megszorításokat úgyszintén, viszont ezek nem mveletként vannak értelmezve, ellentétben a triggerekkel, így könnyebb megérteni a helyességi megszorításokat. A helyességi megszorítások megvédik az adatot mindenféle parancs esetén, hogy ne kerüljenek inkonzisztens állapotba, de triggereket csak speciális parancsok aktiválnak (INSERT, DELETE, UPDATE).

A triggerek rugalmasabb úton tartják meg az adatbázis integritását. Példák triggerekre MS SQL Server-ben új sorra az inserted kulcsszóval hivatkozhatunk törölt sorokra a deleted kulcsszóval lehet hivatkozni UPDATE úgy történik, hogy kitörli a módosított sorokat (vagy csak egy sort) és beszúrja az új sort, ezért lehet hivatkozni az inserted és deleted sorokra is.

Példa Egy software cég projektjeinek a tárolása esetén érdekeltek vagyunk a megrendel cég (tárolva a Customers táblában), illetve a rendelt projekt (tárolva a Projects táblában) adataiban. Egy projekt különböz állapotban lehet: tervezett, aktív, megszakítva, befejezett, stb. (tárolva a ProjStates relációban). Egy projektet felosztunk több kiszabott feladatra (Tasks), melyet egy alkalmazott (Employee) kell elvégezzen, több napra is kiterjedhet egy feladat.

Egy feladatot apró tevékenységekre osztunk, melyet ugyanaz az alkalmazott végez, mint a feladatot, és nem terjedhet több napra, csak egyre. A projektnek, feladatnak és tevékenységnek is vannak: o tervezett kezdési dátum (PlannedStartDate), o effektív kezdési dátum (RealStartDate), o tervezett befejezési dátum (PlannedEndDate), o effektív befejezési dátum (RealEndDate). A projekt, feladat és tevékenység lehet befejezett vagy nem. A Tasks és Activities relációk esetén a Finished (1 ha befejezett, 0 ha nem befejezett) mez adja ezt meg, a

Projects esetén pedig a ProjStateID (4-es ID a befejezett terv). Customers [CustomerID, Name, Address, ] Projects [ProjectID, Title, CustomerID, ProjManID, ProjStateID, PlannedStartDate, PlannedEndDate, RealStartDate,RealEndDate, ] Employees [EmployeeID, FirstName, LastName, ] Tasks [TaskID, Name, ProjectID, Finished, EmployeeID,PlannedStartDate, PlannedEndDate, RealStartDate, RealEndDate, ]

Activities [ActivID, Text, TaskID, Finished, PlannedStartDate, PlannedEndDate, RealStartDate, RealEndDate, ] ProjStates [ProjStateID, Name] A feladatok amit a triggerek segítségével szeretnénk megoldani a következk: helyességi feltételek ellenrzése: nem lehet egy projekt befejezett állapotban, ha létezik olyan a projekthez tartozó feladat, mely nincs befejezve; (lásd Proj_upd trigger)

CREATE TRIGGER Proj_upd ON Projects FOR UPDATE AS declare @vprojid int, @vprojstid as int /* Tests if the ProjStateID is modified to be finished, if there are some tasks belonging to the project, which has Finished on 0 */ set nocount on select @vprojstid = i.projstateid, @vprojid =i.projectid from inserted i

if @vprojstid = 4 begin if exists (select TaskID from Tasks where ProjectID = @vprojid and Finished = 0) begin raiserror ('There are tasks belonging to the project, which are not finished.',16,1) ROLLBACK TRANSACTION end end set nocount off

nem lehet egy feladat befejezett állapotban, ha létezik olyan a feladathoz tartozó tevékenység, mely nincs befejezve. ha egy feladat Finished mezjét 0-ra módosítjuk, azt jelenti azeltt befejezett volt és most be nem fejezetté módosítjuk, elfordulhat, hogy már a projekt is befejezettnek lett nyilvánítva és ha megengedjük, hogy a feladatot be nem fejezetté módosítsa a felhasználó, akkor olyan állapotba jut az adatbázis, hogy a projekt be van fejezve, de van egy feladat, mely hozzá tartozik és nincs befejezve; (lásd Task_upd)

CREATE TRIGGER Task_upd ON Tasks FOR INSERT, UPDATE AS declare @task_finished tinyint, @vtaskid int, @vfinished tinyint, @vprojid int, @proj_state int /* Tests if the Finished field is modified to 1, if there are some activities belonging to the task, which has Finished on 0 */ set nocount on select @task_finished = i.finished, @vtaskid=i.taskid, @vprojid = i.projectid from inserted i

if @task_finished = 1 begin if exists (select ActivID from Activities where TaskID = @vtaskid and Finished = 0) begin raiserror ('There are activities belonging to the task, which are not finished.',16,1) ROLLBACK TRANSACTION end end

/* Tests if the Finished field is modified to 0, the project which it belongs has been marked Finished (ProjStateID= 4) */ if @task_finished = 0 begin select @proj_state = ProjStateID from Projects where ProjectID = @vprojid if @proj_state = 4 begin raiserror ('The project from which the task belongs was marked finished.',16,1) ROLLBACK TRANSACTION

end end set nocount off A Projects esetén csak UPDATE triggert írtunk, míg a Tasks esetén UPDATE és INSERT triggert. A Tasks esetén hivatkozási épség megszorítás van a ProjectID-re, ez azt jelenti, hogy nem tudunk feladatot begyjteni projekt eltt, elször léteznie kell egy projektnek és ahhoz gyjthetünk be feladatokat. Tehát INSERT esetén a projekthez még nem tartozhat egyetlen

feladat sem, nem áll fenn a helytelen állapot veszélye, mely módosítás esetén fennállhat. A feladat esetén, elfordulhat, hogy egy befejezett projekthez akarunk beszúrni egy új, be nem fejezett tevékenységet.