SQL język zapytań (query language) cz.1



Podobne dokumenty
Aspekty aktywne baz danych

Oracle PL/SQL. Paweł Rajba.

Bazy danych. Bazy danych. Zapytania SELECT. Dr inż. Paweł Kasprowski.

Paweł Rajba

Wyzwalacz - procedura wyzwalana, składowana fizycznie w bazie, uruchamiana automatycznie po nastąpieniu określonego w definicji zdarzenia

Bazy danych wykład szósty Więzy i wyzwalacze. Konrad Zdanowski ( Uniwersytet Kardynała Stefana Bazy danych Wyszyńskiego, wykładwarszawa)

Procedury wyzwalane. (c) Instytut Informatyki Politechniki Poznańskiej 1

D D L S Q L. Co to jest DDL SQL i jakie s jego ą podstawowe polecenia?

PLAN WYKŁADU BAZY DANYCH PODSTAWOWE KWESTIE BEZPIECZEŃSTWA OGRANICZENIA DOSTĘPU DO DANYCH

Język SQL. Rozdział 9. Język definiowania danych DDL, część 2.

Bazy danych 2. Wykład 5 Structured Query Language (SQL) c.d. DDL

Bazy danych 10. SQL Widoki

Autor: Joanna Karwowska

Język SQL. Rozdział 10. Perspektywy Stosowanie perspektyw, tworzenie perspektyw prostych i złożonych, perspektywy modyfikowalne i niemodyfikowalne.

Plan ćwiczenia. Rozdział 16 Uwierzytelnianie i autoryzacja w bazie danych. Użytkownicy i schematy (1) Użytkownicy i schematy (2) baza danych: ZESP99

Blaski i cienie wyzwalaczy w relacyjnych bazach danych. Mgr inż. Andrzej Ptasznik

Wprowadzenie do BD Operacje na bazie i tabelach Co poza zapytaniami? Algebra relacji. Bazy Danych i Systemy informacyjne Wykład 2.

Bazy danych 6. Klucze obce. P. F. Góra

Tworzenie tabel. Bazy danych - laboratorium, Hanna Kleban 1

Używany kiedy pełna treść instrukcji SQL jest nieznana przed uruchomieniem programu.

UPDATE Studenci SET Rok = Rok + 1 WHERE Rodzaj_studiow =' INŻ_ST'; UPDATE Studenci SET Rok = Rok 1 WHERE Nr_albumu IN ( '111345','100678');

Przestrzenne bazy danych Podstawy języka SQL

3 Przygotowali: mgr inż. Barbara Łukawska, mgr inż. Maciej Lasota

Administracja i programowanie pod Microsoft SQL Server 2000

Wykład 2. SQL 1 Structured Query Lenguage

Relacyjne bazy danych. Podstawy SQL

SQL 4 Structured Query Lenguage

Zaawansowane bazy danych i hurtownie danych semestr I

Bazy danych Język SQL część 2 Wykład dla studentów matem

Podstawy języka SQL. SQL Structured Query Languagestrukturalny

Informatyka (5) SQL. dr inż. Katarzyna Palikowska Katedra Transportu Szynowego p. 4 Hydro

Perspektywy Stosowanie perspektyw, tworzenie perspektyw prostych i złożonych, perspektywy modyfikowalne i niemodyfikowalne, perspektywy wbudowane.

Baza danych inside. Biologiczne Aplikacje Baz Danych

Bazy danych. Wykład IV SQL - wprowadzenie. Copyrights by Arkadiusz Rzucidło 1

kończy wysyłanie danych do pliku tworzy strukturę tabeli wyświetla opis struktury tabeli zmiana nazwy tabeli usuwanie tabeli

Wyzwalacze. do automatycznego generowania wartości kluczy głównych. Składnia instrukcji tworzacej wyzwalacz

Uprawnienia, role, synonimy

I. Język manipulowania danymi - DML (Data Manipulation Language). Polecenia INSERT, UPDATE, DELETE

Język SQL, zajęcia nr 2

77. Modelowanie bazy danych rodzaje połączeń relacyjnych, pojęcie klucza obcego.

Wykład 8. SQL praca z tabelami 5

Cele. Definiowanie wyzwalaczy

PL/SQL. Zaawansowane tematy PL/SQL. Piotr Medoń

Plan ćwiczenia. Rozdział 16 Uwierzytelnianie i autoryzacja w bazie danych. UŜytkownicy i schematy (2) UŜytkownicy i schematy (1) baza danych: ZESP99

1 Zaznacz poprawne stwierdzenia dotyczące grup plików (filegroup) możemy określić do której grupy plików trafi

Bazy danych. Plan wykładu. Diagramy ER. Podstawy modeli relacyjnych. Podstawy modeli relacyjnych. Podstawy modeli relacyjnych

Relacyjne bazy danych. Podstawy SQL

Plan bazy: Kod zakładający bazę danych: DROP TABLE noclegi CASCADE; CREATE TABLE noclegi( id_noclegu SERIAL NOT NULL,

SQL DDL DML TECHNOLOGIE BAZ DANYCH. Wykład 5: Język DDL i DML. Małgorzata Krętowska

Język SQL. Rozdział 8. Język manipulowania danymi DML

SQL w praktyce. Miłej i owocnej nauki!!!

Wykład IV Modelowanie danych, projektowanie systemu informatycznego Modelowanie konceptualne implementacyjne Modelowanie pojęciowe na encjach

Tworzenie widoku CREATE OR REPLACE VIEW [nazwa_widoku] AS SELECT [nazwy_kolumn] FROM [nazwa_tablicy];

Procedury wyzwalane. Rozdział 13. Procedury wyzwalane. Cele stosowania procedur wyzwalanych. Definiowanie procedury wyzwalanej DML

Bazy danych. Bazy danych. Podstawy języka SQL. Dr inż. Paweł Kasprowski.

Język PL/SQL. Rozdział 6. Procedury wyzwalane

Bazy danych - Materiały do laboratoriów VIII

BAZY DANYCH wprowadzenie do języka SQL. Opracował: dr inż. Piotr Suchomski

Wyzwalacze TWORZENIE WYZWALACZY

Wykład 5. SQL praca z tabelami 2

1: 2: 3: 4: 5: 6: 7: 8: 9: 10:

Przykładowa baza danych BIBLIOTEKA

SQL - DDL. 1 Tabele systemowe. 2 Typy danych

Język SQL, zajęcia nr 1

P o d s t a w y j ę z y k a S Q L

1 Projekt fizyczny 1. 3 Perspektywy słownika danych Źródła 12

SQL :: Data Definition Language

Programowanie w SQL procedury i funkcje. UWAGA: Proszę nie zapominać o prefiksowaniu nazw obiektów ciągiem [OLIMP\{nr indeksu}] Funkcje użytkownika

CREATE USER

Instrukcja podwaja zarobki osób, których imiona zaczynają się P i dalsze litery alfabetu zakładamy, że takich osbób jest kilkanaście.

Instytut Mechaniki i Inżynierii Obliczeniowej fb.com/groups/bazydanychmt/

BAZA DANYCH SIECI HOTELI

Model relacyjny. Wykład II

Hurtownia Świętego Mikołaja projekt bazy danych

Obiekty bazy danych DB2

Bazy danych. Dr inż. Paweł Kasprowski

Bazy danych Język SQL część 1 Wykład dla studentów matem

Wykład 5 funkcje i procedury pamiętane widoki (perspektywy) wyzwalacze

LAB 3 (część 1 Projektu)

Kolekcje Zbiory obiektów, rodzaje: tablica o zmiennym rozmiarze (ang. varray) (1) (2) (3) (4) (5) Rozszerzenie obiektowe w SZBD Oracle

1. Wyzwalacze BD (ang. triggers)

Konstruowanie Baz Danych SQL UNION, INTERSECT, EXCEPT

Ile rekordów będzie zawierała tabela przy założeniu, że na początku była pusta?

Systemy GIS Tworzenie zapytań w bazach danych

Wykład 05 Bazy danych

Bazy danych 2. Wykład 3. Metodologia projektowania baz danych (projektowanie fizyczne)

Grupowanie i funkcje agregujące

Bazy Danych i Usługi Sieciowe

Wprowadzenie do projektowania i wykorzystania baz danych Relacje

Model relacyjny. Wykład II

Bazy danych 8. Widoki i wyzwalacze. P. F. Góra

Widok Connections po utworzeniu połączenia. Obszar roboczy

SIECI KOMPUTEROWE I BAZY DANYCH

Program szkoleniowy Efektywni50+ Moduł IV Podstawy relacyjnych baz danych i język SQL

Ogólny plan przedmiotu. Strony WWW. Literatura BAZY DANYCH. Materiały do wykładu:

CREATE DATABASE ksiegarnia_internetowa DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;

Literatura: SQL Ćwiczenia praktyczne Autor: Marcin Lis Wydawnictwo: Helion. Autor: Joanna Karwowska

SELECT * FROM tabela WHERE warunek wybiera dane spełniające podany warunek

Ćwiczenia laboratoryjne nr 11 Bazy danych i SQL.

Transkrypt:

SQL język zapytań (query language) cz.1

Zapytanie SELECT - podstawy (3) SELECT A 1,A 2,...,A k (1) FROM R 1,R 2,,R n -- lista wyboru (atrybutów) -- relacje (lista FROM) (2) WHERE F -- warunek wyboru (selekcji) π A1,A2,,Ak (σ F (R 1 xr 2 x xr n )) 26 marzec 2007 SQL - język definicji danych 2

Przykładowa baza KS (idk, autor, tytul, dziedzina) EGZ (sygn( sygn,, idk, rokwyd) -- idk jest kluczem obcym CZYT (idc, nazwisko, adres, dataur) WYP ( idc, sygn,, data, dni) -- idc i sygn są kluczami obcymi 26 marzec 2007 SQL - język definicji danych 3

Dziedziny standardowe Selekcja+rzut. Podaj tytuły wszystkich książek Prusa. SELECT tytuł FROM KS WHERE autor= Prus ; 26 marzec 2007 SQL - język definicji danych 4

Więzy kolumny [CONSTRAINT nazwa więzu] NOT NULL NULL DEFAULT wartość domyślna PRIMARY KEY UNIQUE CHECK (warunek)) REFERENCES tabela [(kolumna kolumna)] [akcja referencyjna] [integralność referencyjna] [DEFERRABLE IMMEDIATE] [INITIALLY IMMEDIATE INITIALLY DEFERRED] 26 marzec 2007 SQL - język definicji danych 5

Akcja referencyjna ON { DELETE UPDATE } { RESTRICT NO ACTION CASCADE SET NULL SET DEFAULT } 26 marzec 2007 SQL - język definicji danych 6

Integralność referencyjna Domyślnie jeżeli jakaś kolumna klucza obcego jest pusta, to integralność referencyjna nie jest kontrolowana; MATCH FULL jeśli wszystkie kolumny klucza obcego są puste, to integralność referencyjna nie jest kontrolowana; przeciwnie musi istnieć odpowiedni rekord w tabeli nadrzędnej; MATCH PARTIAL rekord podrzędny pasuje do rekordu nadrzędnego, jeśli zgadza się z nim na niepustych polach klucza obcego. 26 marzec 2007 SQL - język definicji danych 7

Więzy tabeli [CONSTRAINT <nazwa więzu>] PRIMARY KEY (<lista kolumn>) UNIQUE (<lista kolumn>) FOREIGN KEY (<lista kolumn>) REFERENCES <tabela>(<lista kolumn>) [<akcja referencyjna>][<integralność referencyjna>] CHECK <warunek> [DEFERRED IMMEDIATE] 26 marzec 2007 SQL - język definicji danych 8

Więzy moment kontroli Spełnienie więzu może być kontrolowane natychmiast po wprowadzeniu, aktualizacji rekordu z tabeli (IMMEDIATE); Może być jednak odroczone do momentu wypełnienia transakcji (DEFERRED); Zmiany więzów nie muszą powodować kontroli całej aktualnej zawartości bazy danych pod kątem ich poprawności (naruszenia więzów dla innych rekordów, które zostały wcześniej wstawione do bazy). SET CONSTRAINTS {ALL nazwa nazwa, } {DEFERRED IMMEDIATE} 26 marzec 2007 SQL - język definicji danych 9

Dziedzina użytkownika CREATE DOMAIN <nazwa> AS <dziedzina_zdefiniowana> [DEFAULT <wartość domyślna>][<więzy dziedzinowe>] <wartość domyślna>::= <stała> NULL <f.bezarg.> <więzy dziedzinowe>::= [CONSTRAINT <nazwa więzu>] CHECK ( VALUE { IN (v1,v2,...,vk) [IS] [NOT] NULL <operator porównania> <wartość> BETWEEN <w1> AND <w2> LIKE <wzorzec> IN (SELECT )}) 26 marzec 2007 SQL - język definicji danych 10

26 marzec 2007 SQL - język definicji danych 11

SQL język zapytań (query language) cz.2

Perspektywa - implementacja Obliczanie wartości na żądanie znaczenie analogiczne jak wyrażenie tabelowe w klauzuli FROM Perspektywa materializowana zapytanie definiujące perspektywę jest wyliczane i przechowywane jako tabela przez SZBD. Zapytania do perspektywy są realizowane przez wgląd w tę tabelę. Modyfikacje perspektywy mogą być przeprowadzane przez: ponowne obliczenie zapytania; aktualizację tylko tych rekordów, które dotknęła modyfikacja. Rozkład jest metodą polegającą na przekształceniu zapytania dotyczącego perspektywy tak, by dotyczyło tabel bazowych, a warunki wyboru pochodzące z definicji perspektywy zostały włączone w definicję tabeli 26 marzec 2007 SQL - język definicji danych 13

Perspektywa modyfikacje danych Perspektywa jest modyfikowalna,, gdy dotyczy jednej tabeli i występują w niej wszystkie kolumny niepuste (z nałożonym warunkiem NOT NULL lub PRIMARY KEY) z tej tabeli. Perspektywa może być modyfikowalna,, gdy powstała z kilku tabel, ale występują w niej kolumny kluczy i kolumny niepuste z wszystkich tabel, które są złączane w celu utworzenia perspektywy. 26 marzec 2007 SQL - język definicji danych 14

Perspektywa modyfikacje danych Perspektywa nie może być modyfikowalna, gdy: zawiera operator DISTINCT; zwraca kolumnę wyliczaną; jest definiowana przez zapytanie grupujące; jest definiowana przez zapytanie zawierające UNION, EXCEPT lub INTERSECT; Modyfikacja może być niebezpieczna, gdy w warunku WHERE zapytania definiującego występuje zapytanie zagnieżdżone odwołujące się do tabeli występującej w klauzuli FROM tego zapytania, czyli warunek selekcji w perspektywie jest zależny od aktualnej zawartości tabeli, na bazie której jest zdefiniowana perspektywa 26 marzec 2007 SQL - język definicji danych 15

Perspektywa WITH CHECK OPTION WITH CHECK OPTION rekord wstawiony poprzez perspektywę musi należeć do perspektywy; rekord zmodyfikowany poprzez perspektywę nadal musi należeć do perspektywy. CASCADED wstawienie lub modyfikacja rekordu do perspektywy lub perspektywy na jej podstawie zdefiniowanej, nie może spowodować zniknięcia rekordu z danej perspektywy; LOCAL rekord może zniknąć po modyfikacji z perspektywy, o ile zniknie z tabeli, na podstawie której jest zdefiniowana perspektywa. 26 marzec 2007 SQL - język definicji danych 16

Indeksy CREATE [UNIQUE] INDEX <nazwa indeksu> ON <nazwa tabeli> (<lista atrybutów>) [USING { HASH BTREE RTREE }] 26 marzec 2007 SQL - język definicji danych 17

Sekwencje CREATE SEQUENCE <nazwa> [INCREMENT <przyrost>] [START <wartoscpocz>] [MINVALUE <wartoscmin>] [MAXVALUE <wartoscmaks>] [CYCLE NOCYCLE] [ORDER NOORDER] Zastosowanie: nextval( sekw1 sekw1 ); setval( sekw1 sekw1,wartosc); 26 marzec 2007 SQL - język definicji danych 18

Zmiany w schemacie BD DROP usunięcie danego obiektu (DOMAIN, TABLE, VIEW, INDEX, SEQUENCE) z opcją RESTRICT (domyślnie) lub CASCADE; usunięcie z opcją RESTRICT nie powiedzie się, jeśli istnieją obiekty zależne od danego; z opcją CASCADE usuwamy wszystkie obiekty zależne (kasujemy perspektywy, likwidujemy więzy klucza obcego odwołujące się do likwidowanej tabeli, ) ALTER modyfikacja definicji; możliwe operacje, to: [DROP ADD ] COLUMN] [DROP ADD ] CONSTRAINT [DROP SET ] [DEFAULT...][CHECK...] 26 marzec 2007 SQL - język definicji danych 19

Perspektywa (tabela wirtualna) CREATE VIEW <nazwa perspektywy> [<nazwa kolumny>,...] AS <zapytanie SELECT definiujące perspektywę> [ WITH [CASCADED LOCAL] CHECK OPTION] 26 marzec 2007 SQL - język definicji danych 20

Schematy i użytkownicy CREATE USER nazwa [CREATEDB CREATEUSER IN GROUP nazwagrupy ] CREATE GROUP nazwagrupy [opcje-jak-przy- uzytkowniku] CREATE ROLE nazwaroli [opcje-jak-przy- uzytkowniku] CREATE SCHEMA [nazwa[ nazwa] ] [AUTHORIZATION uzytkownik] Ogólna nazwa obiektu b.d.:schemat.obiekt 26 marzec 2007 SQL - język definicji danych 21

Prawa Dowolny SZBD powinien zapewniać również poufność naszych danych oraz możliwość regulowania oraz limitowania dostępu do danych. Dlatego w SQL-u zdefiniowano tzw. prawa, które właściciel obiektu może dać (GRANT) lub odebrać (REVOKE) innym użytkownikom. Istnieje też możliwość przekazania otrzymanych wcześniej praw (GRANT OPTION). UWAGA: użytkownik ma pełne prawa do obiektów, które utworzył; tych praw nie można mu odebrać (sam też nie może się pozbyć prawa usuwania i modyfikowania swoich obiektów). 26 marzec 2007 SQL - język definicji danych 22

Składnia do nadawania praw GRANT prawa ON element-bazy-danych TO lista- użytkowników [WITH GRANT OPTION] Prawa, które można nadać to: dla tabel, perspektyw: SELECT, INSERT, DELETE, UPDATE, REFERENCES; dla indeksów, dziedzin, sekwencji, funkcji: USAGE, UPDATE, EXECUTE; REFERENCES dotyczy możliwości odwołania się do danej struktury w więzach integralności (np. asercje,więzy integralności referencyjnej); USAGE odnosi się do dziedzin i elementów schematu innych niż relacje; użytkownik definiujący perspektywę musi mieć prawo SELECT do tabel, do których odwołuje się w perspektywie; można także nadać wszystkie prawa (ALL [PRIVILEGES]) lub prawa wszystkim użytkownikom (PUBLIC). 26 marzec 2007 SQL - język definicji danych 23

Przykłady nadawania praw root: : GRANT REFERENCES(ido ido), SELECT ON osoba TO mariusz; - potrzebne by mariusz mógł stworzyć poniższe: perspektywę (SELECT) i tabelę (REFERENCES) mariusz: : CREATE VIEW absolwenci AS SELECT * FROM osoba WHERE kato= abs ; mariusz: : CREATE TABLE moi_koledzy (ident INT REFERENCES osoba, adres VARCHAR, tel VARCHAR(20)); root: : GRANT SELECT, INSERT ON osoba TO mariusz WITH GRANT OPTION; mariusz: : GRANT SELECT ON absolwenci TO PUBLIC; root: : GRANT USAGE ON DOMAIN imiona TO jacek, placek WITH GRANT OPTION; 26 marzec 2007 SQL - język definicji danych 24

Składnia REVOKE Odbieranie nadanych wcześniej praw (innych niż GRANT) REVOKE prawa ON element-bazy-danych FROM lista-użytkowników [CASCADE RESTRICT]; Odbieranie prawa GRANT REVOKE GRANT OPTION FOR prawa ON element-bazy-danych FROM lista- użytkowników [CASCADE RESTRICT] 26 marzec 2007 SQL - język definicji danych 25

REVOKE Podobne jak w przypadku GRANT w zdaniu REVOKE mogą wystąpić ALL PRIVILEGES oraz PUBLIC. Prawa są autoryzowane - jeśli ktoś otrzymał takie samo prawo od wielu użytkowników to odebranie praw przez jednego użytkownika nie powoduje odebrania tego prawa przyznanego przez innych użytkowników (czyli dopiero, gdy wszystkie osoby odbiorą to prawo zostanie ono utracone) Jeśli użytkownik przekazał prawo, które uzyskał z klauzulą GRANT OPTION, to odebranie mu tej opcji powoduje, że prawo, które przekazał innym, jest im odbierane. Prawo trzeba odbierać tą samą drogą, jaką było nadane jeśli A nadał prawo X użytkownikowi B WITH GRANT OPTION, a B nadał to prawo C, to A nie może odebrać prawa bezpośrednio C (REVOKE X FROM C) musi odebrać GRANT OPTION użytkownikowi B (z klauzulą CASCADE), a to spowoduje odebranie prawa X użytkownikowi C. 26 marzec 2007 SQL - język definicji danych 26

REVOKE root:grant INSERT ON osoba TO mariusz WITH GRANT OPTION; mariusz: : GRANT INSERT ON osoba TO janusz; root: : REVOKE INSERT ON osoba FROM janusz; ; -> janusz ma nadal prawo, bo nadał je mariusz root: : GRANT SELECT ON przedmiot TO mariusz, janusz WITH GRANT OPTION; mariusz: : GRANT SELECT ON przedmiot TO janusz; root: : REVOKE SELECT ON przedmiot FROM janusz; ; -> janusz ma nadal prawo SELECT to od mariusza root: : REVOKE GRANT OPTION FOR SELECT ON przedmiot FROM mariusz [CASCADE]; -> janusz traci prawo przekazania prawa SELECT próba odebrania tego prawa bez CASCADE spowoduje ostrzeżenie (ale nie powiedzie się), z opcją CASCADE prawo zostanie odebrane; mariusz: : REVOKE SELECT ON przedmiot FROM janusz; ; -> janusz nie ma już prawa SELECT; 26 marzec 2007 SQL - język definicji danych 27

Więzy ogólne, czyli asercje Dotychczas poznane więzy dotyczyły pojedynczej krotki (CHECK dla kolumny i/lub tabeli), klucza głównego (PRIMARY KEY) i alternatywnego (UNIQUE, NOT NULL) oraz ewentualnie prostych związków między krotkami z różnych relacji (FOREIGN KEY REFERENCES). Czasami chcielibyśmy zapewnić przestrzeganie warunku, który dotyczy całej relacji lub paru relacji. Próba zapisania takiego warunku w definicji jednej z relacji może nie dać zamierzonego efektu warunek taki jest sprawdzany przy okazji operacji na tej relacji, a nie na innych. 26 marzec 2007 SQL - język definicji danych 28

Składnia asercji CREATE ASSERTION nazwa_asercji CHECK (warunek( warunek) gdzie warunek musi być typu logicznego, np. NOT EXISTS (SELECT * FROM zapis WHERE ido IN (SELECT ido FROM osoba WHERE kato= abs ) 3< ALL(SELECT COUNT(*) FROM (((przedmiot NATURAL JOIN edycja) ) JOIN sem ON ids=semestr semestr) ) JOIN kategoria ON (idk( idk=typ)) WHERE sem.nazwa LIKE %letni 2006% AND kategoria.nazwa= kurs ) Inne przykłady warunków: do żadnej grupy nie może być zapisanych więcej studentów, niż liczba podana w polu limit; wykład obowiązkowy musi prowadzić profesor (moglibyśmy go weryfikować, gdybyśmy mieli w bazie tytuły); aby zapisać się na przedmiot X, trzeba mieć wcześniejszy wpis na przedmiot Y; 26 marzec 2007 SQL - język definicji danych 29

Wyzwalacze (TRIGGERS) Czasami chcielibyśmy reagować w bardziej aktywny sposób na sytuacje, gdy dochodzi do naruszenia jakiegoś warunku lub niezmiennika niż tylko nie dopuszczając do tych modyfikacji bazy danych, która ten warunek narusza (być może dla pewnych sytuacji umiemy temu zaradzić). Poza tym czasami to my chcielibyśmy decydować, kiedy warunek ma być sprawdzany (choćby ze względu na wydajność), a w przypadku np. asercji to system o tym decyduje. Poza tym asercje są drogie, więc w praktyce nie istnieją. Dlatego firmy zaoferowały coś tańszego od asercji, co pozwala nam na kontrolowanie poprawności danych w bazie w pewnych sytuacjach. 26 marzec 2007 SQL - język definicji danych 30

Cechy wyzwalaczy Wyzwalacze (potrzeba ich użycia) są testowane tylko przy zajściu zdarzenia (wstawienie, usunięcie, modyfikacja krotki) określonego przez programistę (projektanta bazy) (w przypadku asercji i więzów krotkowych decyduje o tym SZBD). Warunek jest testowany w chwili zajścia zdarzenia. Jeśli zachodzi warunek opisany w wyzwalaczu, to wykonywana jest akcja związania z wyzwalaczem, której zadaniem jest przygotowanie bazy do zmian wywołanych zdarzeniem lub uzupełnienie tych zmian tak, by baza po nich pozostawała w poprawnym stanie. W akcji wyzwalacza mogą być zawarte zdarzenia, z którymi są związane ich własne wyzwalacze. Są one uruchamiane zarówno w trakcie bezpośredniego wywołania zdarzenia w SQL, jak i wówczas, gdy wydarzenie to zostało wywołane np. przez inny wyzwalacz. Zdarzenie i akcja wyzwalacza stanowią jedną transakcję gdy coś się nie powiedzie w trakcie akcji wyzwalacza, to wycofywana jest cała operacja (aż do początku całej transakcji, czyli zdarzenia, które jako pierwsze uruchomiło wyzwalacz). 26 marzec 2007 SQL - język definicji danych 31

Składnia wyzwalaczy CREATE TRIGGER nazwa_wyzwalacza {BEFORE INSTEAD OF AFTER} {UPDATE [OF nazwa_kolumny] ] INSERT DELETE} ON nazwa_tabeli REFERENCING {OLD OLD TABLE} AS nazwa_zmiennej1 {NEW NEW TABLE} AS nazwa_zmiennej2 WHEN (warunek( warunek) lista_poleceń_sql_do_wykonania //akcja [FOR [EACH] {ROW STATEMENT}] UWAGA: W miejscu klauzul REFERENCING WHEN... lista_poleceń może wystąpić wywołanie procedury EXECUTE PROCEDURE, w której wykonywane są analogiczne operacje. 26 marzec 2007 SQL - język definicji danych 32

Cechy wyzwalaczy Akcja może być wykonana przed (BEFORE), po (AFTER) lub zamiast (INSTEAD OF) zdarzenia Można określać czy akcja ma być wykonywana dla każdej modyfikowanej krotki (FOR EACH ROW) czy tylko raz dla wszystkich krotek zmodyfikowanych w pojedynczej operacji (FOR EACH SENTENCE, czyli domyślnie); W akcji dostępne są wartości sprzed (OLD, OLD TABLE) zajścia zdarzenia jak i nowe (NEW,NEW TABLE) wartości; OLD i OLD TABLE mają sens dla DELETE i UPDATE, a NEW i NEW TABLE dla UPDATE i INSERT; OLD TABLE i NEW TABLE mają sens dla FOR EACH SENTENCE, a OLD i NEW dla FOR EACH ROW. Akcja jest wykonywana tylko wtedy, gdy spełniony jest warunek z klauzuli WHEN. 26 marzec 2007 SQL - język definicji danych 33

Przykład wyzwalacza Uniemożliwienie zapisu ponad limit do grupy: CREATE TRIGGER PilnujLimituPrzyZapisie AFTER INSERT ON zapis REFERENCING NEW AS nowa WHEN ((SELECT limit FROM grupa WHERE idg=nowa nowa.idg)<(select COUNT(*) FROM zapis WHERE idg=nowa.idg nowa.idg)) DELETE FROM zapis WHERE idg=nowa.idg AND ido=nowa.ido FOR EACH ROW 26 marzec 2007 SQL - język definicji danych 34

Inny przykład wyzwalacza Uniemożliwienie zapisu ponad limit do grupy (cd.) konieczne jest także zareagowanie, gdy ktoś zechce obniżyć limit poniżej liczby aktualnie zapisanych w grupie osób: CREATE TRIGGER PilnujLimituPrzyGrupie AFTER UPDATE OF limit ON grupa REFERENCING NEW AS nowa REFERENCING OLD AS stara WHEN (stara.limit( stara.limit>nowa.limit AND EXISTS (SELECT grupa.idg FROM zapis NATURAL JOIN grupa GROUP BY grupa.idg HAVING COUNT(*)>limit limit) UPDATE grupa SET limit=stara.limit WHERE idg=stara.idg FOR EACH ROW 26 marzec 2007 SQL - język definicji danych 35

26 marzec 2007 SQL - język definicji danych 36