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

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

ADATBÁZISOK: TAN7.EA témaköre SQL DDL, DML, DCL, Tranz.kez.

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

Tranzakciók, nézettáblák, indexek. Párhuzamos folyamatok irányítása Virtuális és materializált nézettáblák Az adathozzáférés felgyorsítása

Bevezetés: az SQL-be

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

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

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

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

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

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

Bevezetés az SQL-be. Tankönyv: Ullman-Widom: Adatbázisrendszerek Alapvetés Második, átdolgozott kiadás, Panem, 2009

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

Tranzakciók az SQL-ben

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

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

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

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

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

Az SQL adatbázisnyelv: DML

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

Tervezés: Egyed-kapcsolat modell és az SQL DDL: táblák, nézetek

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

Adatbázis tartalmának módosítása. SQL DML utasítások

Tranzakciókezelés PL/SQL-ben

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

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

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

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

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

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

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

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

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

Adatbázis rendszerek SQL nyomkövetés

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

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

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

Adatbázis rendszerek. Molnár Bence. Szerkesztette: Koppányi Zoltán

SQL- Utasítások csoportosítása Definíció: DDL: - objektum létrehozás CREATE - objektum megszüntetés DROP - objektum módosítás ALTER

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

Adatbázis használat I. 5. gyakorlat

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

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

Adattípusok. Max. 2GByte

Információs rendszerek Adatbázis-kezelés

Adattípusok. Max. 2GByte

Adatbázisok* tulajdonságai

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

BEVEZETÉS Az objektum fogalma

Az adatbázisrendszerek világa

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

Célkitűzések Az Oracle10 g felépítésének, használatának alapszíntű megismeré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


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

Adatbázis rendszerek. Molnár Bence. Szerkesztette: Koppányi Zoltán

Adatbázis-kezelés, információs-rendszerek

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

SQL parancsok feldolgozása

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

Lekérdezések az SQL-ben 1.rész

Bevezetés: Relációs adatmodell

Relációs algebra áttekintés és egy táblára vonatkozó lekérdezések

7. fejezet Kulcsok és idegen kulcsok

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

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

ABR ( Adatbázisrendszerek) 2. Előadás : Műveletek a relációs modellben

Adatbázis Rendszerek I. 9. SQL alapok (DDL esettanulmány)

Lekérdezések az SQL-ben 1.rész

Adatbázisok biztonsága

Több táblára vonatkozó lekérdezések Relációs algebra és SQL SELECT

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

Bevezetés: Relációs adatmodell

Bevezetés: Relációs adatmodell

SQL bevezetés. Select-From-Where záradékok Több relációt tartalmazó lekérdezések Alkérdések

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

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

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

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

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

Relációs algebra 2.rész példák

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

Java és web programozás

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

Lekérdezések az SQL-ben 2.rész

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

Sapientia - Erdélyi Magyar TudományEgyetem (EMTE) Marosvásárhely. ABR ( Adatbázisrendszerek) 12. Előadás:

A relációs algebra egy speciális algebra, amely néhány egyszerű, de hathatós. operandusok. Egy reláció megadható a nevével vagy közvetlenül, sorainak

Tranzakció-kezelés, alapfogalmak. Vassányi István, 2012.

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

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

Haladó DBMS ismeretek 1

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

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

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

ADATBÁZIS-KEZELÉS. Adatbázis-kezelő rendszerek

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 elmélete

LOGISZTIKAI ADATBÁZIS RENDSZEREK BEVEZETÉS

Átírás:

Adatbázisok-I. előadás dr. Hajas Csilla (ELTE IK) http://sila.hajas.elte.hu/ 6.ea: SQL folytatás SQL DDL, DCL Az előadások Ullman-Widom: Adatbázisrendszerek Alapvetés alapján készültek, forrás: http://infolab.stanford.edu/~ullman/dscb.html Adatbázisok-1 (Hajas Csilla, ELTE IK) 6.előadás: SQL DDL, DCL 1

SQL áttekintés Mi volt eddig? 6.1-6.4. Lekérdezések az SQL-ben: SELECT 6.5. SQL DML: INSERT, DELETE, UPDATE -------------------------------- 7.1.-7.3. Megszorítások CREATE TABLE, CONSTRAINTS, feltételek, kulcsok, hivatkozási épség Hogyan folytatjuk? 7.4. Önálló megszorítások 7.5. Triggerek 8.1-8.2. Nézettáblák ----------------------------------- 10.1. SQL DCL GRANT, REVOKE ----------------------------------- 6.6. Az ACID-tranzakciók, COMMIT, ROLLBACK Adatbázisok-1 (Hajas Csilla, ELTE IK) 6.előadás: SQL DDL, DCL 2

Emlékeztető: SQL fő komponensei Az SQL elsődlegesen lekérdező nyelv (Query Language) SELECT utasítás (az adatbázisból információhoz jussunk) Adatkezelő nyelv, DML (Data Manipulation Language) INSERT, UPDATE, DELETE, SELECT Sémaleíró nyelv, DDL (Data Definition Language) CREATE, ALTER, DROP Tranzakció-kezelés COMMIT, ROLLBACK, SAVEPOINT Adatvezérlő nyelv, DCL (Data Control Language) GRANT, REVOKE Procedurális kiterjesztések SQL/PSM és a gyakorlatban Oracle PL/SQL Adatbázisok-1 (Hajas Csilla, ELTE IK) 6.előadás: SQL DDL, DCL 3

Emlékeztető: SQL DDL Az SQL tartalmaz adatleíró részt (DDL), az adatbázis objektumainak a leírására és megváltoztatására. Objektumok leíró parancsa: CREATE utasítás. A relációt az SQL-ben táblának (TABLE) nevezik, az SQL alapvetően háromféle táblát kezel: Alaptáblák (permanens) CREATE TABLE Nézettáblák CREATE VIEW Átmeneti munkatáblák (WITH utasítás) Alaptáblák megadása: CREATE TABLE Adatbázisok-1 (Hajas Csilla, ELTE IK) 6.előadás: SQL DDL, DCL 4

Emlékeztető: Reláció sémák SQL-ben A legegyszerűbb formája: CREATE TABLE relációnév ( Attribútum deklarációk listája, Kiegészítő lehetőségek ); Az attribútum deklaráció legalapvetőbb elemei: Attribútumnév típus [kiegészítő lehetőségek] -- itt: a típus olyan, amit az SQL konkrét megvalósítása támogat (gyakorlaton Oracle környezetben nézzük meg), Típusok, pl: INTEGER, REAL, CHAR, VARCHAR, DATE -- A kiegészítő lehetőségek például [PRIMARY KEY], stb., [FOREIGN KEY, REFERENCES], [NOT NULL], [CHECK] Adatbázisok-1 (Hajas Csilla, ELTE IK) 6.előadás: SQL DDL, DCL 5

Megszorítások (áttekintés) (1) Kulcsok és idegen kulcsok A hivatkozási épség fenntartása Megszorítások ellenőrzésének késleltetése (2) Értékekre vonatkozó feltételek NOT NULL feltételek Attribútumra vonatkozó CHECK feltételek (3) Sorokra vonatkozó megszorítások Sorra vonatkozó CHECK feltételek (4) Megszorítások módosítása (constraints) (5) Önálló megszorítások (create assertion) (6) Triggerek (create trigger) Adatbázisok-1 (Hajas Csilla, ELTE IK) 6.előadás: SQL DDL, DCL 6

Ismétlés: Kulcsok és idegen kulcsok Kiegészítő lehetőségeket: Kulcs és idegen kulcs (foreign key) hivatkozási épség megadása PRIMARY KEY vagy UNIQUE Kulcsok megadásának két változata van: Egyszerű kulcs (egy attribútum) vagy Összetett kulcs (attribútumok listája) FOREIGN KEY, a hivatkozott attribútumoknak a másik táblában kulcsnak kell lennie! REFERENCES kulcsszó használatának két lehetősége: attribútumként vagy sémaelemként lehet megadni. Adatbázisok-1 (Hajas Csilla, ELTE IK) 6.előadás: SQL DDL, DCL 7

Ismétlés: A stratégia kiválasztása hivatkozási épség megőrzésére Ha idegen kulcsot deklarálunk megadhatjuk beszúrásra is és törlésre is a SET NULL és a CASCADE stratégiát: ON [UPDATE, DELETE][SET NULL CASCADE] Ha nem adjuk meg, a default stratégia működik, elutasítja az épséget sértő törlést vagy módosítást. Példa: CREATE TABLE Felszolgál ( söröző CHAR(20), sör CHAR(20), ár REAL, FOREIGN KEY(sör)REFERENCES Sörök(név) ON DELETE SET NULL ON UPDATE CASCADE); Adatbázisok-1 (Hajas Csilla, ELTE IK) 6.előadás: SQL DDL, DCL 8

Értékekre vonatkozó feltételek Egy adott oszlop értékeire vonatkozóan adhatunk meg megszorításokat. A CREATE TABLE utasításban az attribútum deklarációban NOT NULL kulcsszóval az attribútum deklarációban CHECK(<feltétel>) A feltétel, mint a WHERE feltétel, alkérdés is használható. A feltételben csak az adott attribútum neve szerepelhet, más attribútumok (más relációk attribútumai is) csak alkérdésben szerepelhetnek. Adatbázisok-1 (Hajas Csilla, ELTE IK) 6.előadás: SQL DDL, DCL 9

Sorokra vonatkozó megszorítások A CHECK (<feltétel>) megszorítás a séma elemeként is megadható. A feltételben tetszőleges oszlop és reláció szerepelhet. De más relációk attribútumai csak alkérdésben jelenhetnek meg. Csak beszúrásnál és módosításnál ellenőrzi a rendszer. Adatbázisok-1 (Hajas Csilla, ELTE IK) 6.előadás: SQL DDL, DCL 10

Példa: sor-alapú megszorítások Csak Joe bárja nevű sörözőben lehetnek drágábbak a sörök 5 dollárnál: CREATE TABLE Felszolgál ( ); söröző CHAR(20), sör ár CHAR(20), REAL, CHECK (söröző= Joe bárja OR ár <= 5.00) Itt fejeztük be! Jön: Írjuk át önálló megszorításra! Adatbázisok-1 (Hajas Csilla, ELTE IK) 6.előadás: SQL DDL, DCL 11

Önálló megszorítások: Assertions SQL aktív elemek közül a leghatékonyabbak nincs hozzárendelve sem sorokhoz, sem azok komponenseihez, hanem táblákhoz kötődnek. Ezek is az adatbázissémához tartoznak a relációsémákhoz és nézetekhez hasonlóan. CREATE ASSERTION <név> CHECK (<feltétel>); A feltétel tetszőleges táblára és oszlopra hivatkozhat az adatbázissémából. Adatbázisok-1 (Hajas Csilla, ELTE IK) 6.előadás: SQL DDL, DCL 12

Példa: önálló megszorítások A Felszolgál(söröző, sör, ár) táblában nem lehet olyan söröző, ahol a sörök átlagára 5 dollárnál több CREATE ASSERTION CsakOlcsó CHECK ( NOT EXISTS ( SELECT söröző FROM Felszolgál GROUP BY söröző HAVING 5.00 < AVG(ár) )); (SELECT.. olyan sörözők, ahol a sörök átlagosan drágábbak 5 dollárnál) Adatbázisok-1 (Hajas Csilla, ELTE IK) 6.előadás: SQL DDL, DCL 13

Példa: önálló megszorítások Az Sörvivó(név, cím, telefon) és Söröző(név, cím, engedély) táblákban nem lehet több bár, mint amennyi sörivó van. CREATE ASSERTION KevésBár CHECK ( (SELECT COUNT(*) FROM Söröző) <= (SELECT COUNT(*) FROM Sörivó) ); Adatbázisok-1 (Hajas Csilla, ELTE IK) 6.előadás: SQL DDL, DCL 14

Önálló megszorítások ellenőrzése Alapvetően az adatbázis bármely módosítása előtt ellenőrizni kell. Egy okos rendszer felismeri, hogy mely változtatások, mely megszorításokat érinthetnek. Példa: a Sörök tábla változásai nincsenek hatással az iménti KevésBár megszorításra. Ugyanez igaz a Sörivók táblába történő beszúrásokra is. Adatbázisok-1 (Hajas Csilla, ELTE IK) 6.előadás: SQL DDL, DCL 15

Megszorítások v.s. triggerek Aktív elemek olyan kifejezés vagy utasítás, amit egyszer eltároltunk az adatbázisban és azt várjuk tőle, hogy a megfelelő pillanatban lefusson (pl. adatok helyességének ellenőrzése) A megszorítás adatelemek közötti kapcsolat, amelyet az adatbázis-kezelő rendszernek fent kell tartania. Triggerek olyankor hajtódnak végre, amikor valamilyen megadott esemény történik, mint például sorok beszúrása egy táblába. Adatbázisok-1 (Hajas Csilla, ELTE IK) 6.előadás: SQL DDL, DCL 16

Miért hasznosak a triggerek? Az önálló megszorításokkal (assertions) sok mindent le tudunk írni, az ellenőrzésük azonban gondot jelenthet. Az attribútumokra és sorokra vonatkozó megszorítások ellenőrzése egyszerűbb (tudjuk mikor történik), ám ezekkel nem tudunk minden kifejezni. A triggerek esetén a felhasználó mondja meg, hogy egy megszorítás mikor kerüljön ellenőrzésre. Adatbázisok-1 (Hajas Csilla, ELTE IK) 6.előadás: SQL DDL, DCL 17

Esemény-Feltétel-Tevékenység szabályok A triggereket esetenként ECA szabályoknak (event-condition-action) esemény-feltételtevékenység szabályoknak is nevezik. Esemény: általában valamilyen módosítás a adatbázisban, INSERT, DELETE, UPDATE. Mikor?: BEFORE, AFTER, INSTEAD Mit?: OLD ROW, NEW ROW FOR EACH ROW OLD/NEW TABLE FOR EACH STATEMENT Feltétel : SQL igaz-hamis-ismeretlen feltétel. Tevékenység : SQL utasítás, BEGIN..END, SQL/PSM tárolt eljárás Adatbázisok-1 (Hajas Csilla, ELTE IK) 6.előadás: SQL DDL, DCL 18

Példa triggerre Ahelyett, hogy visszautasítanánk a Felszolgál(söröző, sör, ár) táblába történő beszúrást az ismeretlen sörök esetén, a Sörök(név, gyártó) táblába is beszúrjuk a megfelelő sort a gyártónak NULL értéket adva. Adatbázisok-1 (Hajas Csilla, ELTE IK) 6.előadás: SQL DDL, DCL 19

Példa: trigger definíció CREATE TRIGGER SörTrig AFTER INSERT ON Felszolgál REFERENCING NEW ROW AS ÚjSor FOR EACH ROW WHEN (ÚjSor.sör NOT IN (SELECT név FROM Sörök)) INSERT INTO Sörök(név) VALUES(ÚjSor.sör); Esemény Feltétel Tevékenység Adatbázisok-1 (Hajas Csilla, ELTE IK) 6.előadás: SQL DDL, DCL 20

Triggerek --- 1 A triggerek, amelyeket szokás esemény-feltételtevékenység szabályoknak is nevezni, az eddigi megszorításoktól három dologban térnek el: A triggereket a rendszer csak akkor ellenőrzi, ha bizonyos események bekövetkeznek. A megengedett események általában egy adott relációra vonatkozó beszúrás, törlés, módosítás, vagy a tranzakció befejeződése. Adatbázisok-1 (Hajas Csilla, ELTE IK) 6.előadás: SQL DDL, DCL 21

Triggerek --- 2 A kiváltó esemény azonnali megakadályozása helyett a trigger először egy feltételt vizsgál meg Ha a trigger feltétele teljesül, akkor a rendszer végrehajtja a triggerhez tartozó tevékenységet. Ez a művelet ezután megakadályozhatja a kiváltó esemény megtörténtét, vagy meg nem történtté teheti azt. Adatbázisok-1 (Hajas Csilla, ELTE IK) 6.előadás: SQL DDL, DCL 22

Tankönyv példája (7.5. ábra) -- Nem engedi csökkenteni a gyártásirányítók nettó bevételét: CREATE TRIGGER NetBevétTrigger AFTER UPDATE OF nettóbevétel ON GyártásIrányító REFERENCING OLD ROW AS RégiSor, NEW ROW AS ÚjSor FOR EACH ROW WHEN(RégiSor.nettóBevétel > ÚjSor.nettóBevétel) UPDATE GyártásIrányító SET nettóbevétel = RégiSor.nettóBevétel WHERE azonosító = ÚjSor.azonosító; Adatbázisok-1 (Hajas Csilla, ELTE IK) 6.előadás: SQL DDL, DCL 23

Tankönyv példája (7.6. ábra) -- Az átlagos nettó bevétel megszorítása: CREATE TRIGGER ÁtlagNetBevétTrigger AFTER UPDATE OF nettóbevétel ON GyártásIrányító REFERENCING OLD TABLE AS RégiAdat, NEW TABLE AS ÚjAdat FOR EACH STATEMENT WHEN(500000 > (SELECT AVG(nettóBevétel) FROM GyártásIrányító) BEGIN DELETE FROM GyártásIrányító WHERE (név, cím, azonosító) IN ÚjAdat; INSERT INTO gyártásirányító (SELECT * FROM RégiAdat); END; Adatbázisok-1 (Hajas Csilla, ELTE IK) 6.előadás: SQL DDL, DCL 24

Tankönyv példája (7.7. ábra) -- A beszúrt sorok NULL értékeinek helyettesítésére, itt csak egyszerűen 1915-tel helyettesíti a trigger a NULL értéket, de ez akár egy bonyolult módon kiszámított érték is lehet: (A BEFORE triggerek egy fontos alkalmazása, amikor egy beszúrandó sort a beszúrás előtt megfelelő formára hoznak) CREATE TRIGGER ÉvJavítóTrigger BEFORE INSERT ON Filmek REFERENCING NEW ROW AS ÚjSor, NEW TABLE AS ÚjAdat FOR EACH ROW WHEN ÚjSor.év IS NULL UPDATE ÚjAdat SET év=1915; Adatbázisok-1 (Hajas Csilla, ELTE IK) 6.előadás: SQL DDL, DCL 25

Nézettáblák Ez volt a Tankönyv 7.fejezete Megszorítások és triggerek Ezután következik a Tankönyv 8.fejezete Nézetek és indexek: Adatbázisok-1 kurzuson csak 8.1. Nézettáblák; 8.2. Adatok módosítása nézettáblákon keresztül szerepel (a vizsgán is!) [Indexekről az Adatbázisok-2 kurzuson tanulunk] Adatbázisok-1 (Hajas Csilla, ELTE IK) 6.előadás: SQL DDL, DCL 26

Mik a nézettáblák? A nézettábla olyan reláció, amit tárolt táblák (vagyis alaptáblák) és más nézettáblák felhasználásával definiálunk. EMPLOYEES table Adatbázisok-1 (Hajas Csilla, ELTE IK) 6.előadás: SQL DDL, DCL 27

A nézettáblák előnyei Korlátozható az adatok elérése Bonyolult lekérdezések egyszerűbben kifejezhetők Az adatfüggetlenség biztosítása Ugyanazon adatokat különböző nézőpontokból szemlélhetjük Adatbázisok-1 (Hajas Csilla, ELTE IK) 6.előadás: SQL DDL, DCL 28

Virtuális vagy materializált? Kétféle nézettábla létezik: Virtuális = nem tárolódik az adatbázisban, csak a relációt megadó lekérdezés. Materializált = kiszámítódik, majd tárolásra kerül. Adatbázisok-1 (Hajas Csilla, ELTE IK) 6.előadás: SQL DDL, DCL 29

Nézettáblák létrehozása és törlése Létrehozása: CREATE [OR REPLACE][FORCE NOFORCE] [MATERIALIZED] VIEW <név> AS <lekérdezés> [WITH CHECK OPTION [CONSTRAINT constraint]] [WITH READ ONLY [CONSTRAINT constraint]]; Alapesetben virtuális nézettábla jön létre. Nézettábla megszüntetése: DROP VIEW <név>; Adatbázisok-1 (Hajas Csilla, ELTE IK) 6.előadás: SQL DDL, DCL 30

Példa: nézettábla létrehozása Mit_ihat(név, sör) nézettáblában a sörivók mellett azon söröket tároljuk, amelyeket legalább egy olyan sörözőben felszolgálnak, amelyet látogat: CREATE VIEW Mit_ihat AS SELECT név, sör FROM Látogat, Felszolgál WHERE L.söröző = F.söröző; Adatbázisok-1 (Hajas Csilla, ELTE IK) 6.előadás: SQL DDL, DCL 31

Példa: nézettáblákhoz való hozzáférés A nézettáblák ugyanúgy kérdezhetők le, mint az alaptáblák. A nézettáblákon keresztül az alaptáblák néhány esetben módosíthatóak is, ha a rendszer a módosításokat át tudja vezetni (lásd módosítások, SQL DML) Példa lekérdezés: SELECT sör FROM Mit_ihat WHERE név = Sally ; Adatbázisok-1 (Hajas Csilla, ELTE IK) 6.előadás: SQL DDL, DCL 32

Módosítható nézettáblák Az SQL szabvány formálisan leírja, hogy mikor lehet egy nézettáblát módosítani és mikor nem, ezek a szabályok meglehetősen bonyolultak. Ha a nézettábla definíciójában a SELECT után nem szerepel DISTINCT, további kikötések: A WHERE záradékban R nem szerepelhez egy alkérdésben sem A FROM záradékban csak R szerepelhet, az is csak egyszer és más reláció nem A SELECT záradék listája olyan attribútumokat kell, hogy tartalmazzon, hogy az alaptáblát fel lehessen tölteni (vagyis kötelező a kulcsként vagy not null-nak deklarált oszlopok megadása) Adatbázisok-1 (Hajas Csilla, ELTE IK) 6.előadás: SQL DDL, DCL 33

Tankönyv példája: nézettáblára Tk.8.1. Példa: Egy olyan nézettáblát szeretnénk, mely a Film(cím, év, hossz, színes, stúdiónév, producerazon) reláció egy részét jelképezi, pontosabban a Paramount stúdió által gyártott filmek címét és gyártási évét CREATE VIEW ParamountFilm AS SELECT cím, év FROM Filmek WHERE stúdiónév = 'Paramount'; Adatbázisok-1 (Hajas Csilla, ELTE IK) 6.előadás: SQL DDL, DCL 34

Nézeteken instead-of-triggerek Tk. 8.8. Példa: Az előző nézettábla módosítható, és hogy az alaptáblába való beszúráskor a stúdiónév attribútum helyes értéke, Paramount legyen, ezt biztosítja ez az INSTEAD OF (helyette) típusú trigger: CREATE TRIGGER ParamountBeszúrás INSTEAD OF INSERT ON ParamountFilm REFERENCING NEW ROW AS ÚjSor FOR EACH ROW INSERT INTO Filmek(cím, év, stúdiónév) VALUES(Újsor.cím, ÚjSor.év, Paramount ); Adatbázisok-1 (Hajas Csilla, ELTE IK) 6.előadás: SQL DDL, DCL 35

Tárolt nézettáblák (Tk.8.5.) CREATE [OR REPLACE] MATERIALIZED VIEW <név> AS <lekérdezés> Adattárházaknál használják (MSc kurzusok) Probléma: minden alkalommal, amikor az alaptáblák valamelyike változik, a materializált nézettábla frissítése is szükségessé válhat. Ez viszont néha túl költséges. Megoldás: Periodikus frissítése a materializált nézettábláknak, amelyek egyébként nem aktuálisak. Adatbázisok-1 (Hajas Csilla, ELTE IK) 6.előadás: SQL DDL, DCL 36

SQL gyakorlatra példa nézetekre Képezzük osztályonként az összfizetést, vegyük ezen számok átlagát, és adjuk meg, hogy mely osztályokon nagyobb ennél az átlagnál az összfizetés. CREATE OR REPLACE VIEW osztaly_osszfiz AS SELECT onev, SUM(fizetes) ossz_fiz FROM dolgozo d, osztaly o WHERE d.oazon = o.oazon GROUP BY onev; CREATE OR REPLACE VIEW atlag_koltseg AS SELECT SUM(ossz_fiz)/COUNT(*) atlag FROM osztaly_osszfiz; SELECT * FROM osztaly_osszfiz WHERE ossz_fiz > (SELECT atlag FROM atlag_koltseg) ; Adatbázisok-1 (Hajas Csilla, ELTE IK) 6.előadás: SQL DDL, DCL 37

Példa nézetek helyett munkatáblák Ugyanez WITH átmeneti munkatáblával megadva, később a rekurziónál is fogunk még a WITH utasítással foglalkozni WITH osztaly_osszfiz AS (SELECT onev, SUM(fizetes) ossz_fiz atlag_koltseg AS FROM dolgozo d, osztaly o WHERE d.oazon = o.oazon GROUP BY onev), (SELECT SUM(ossz_fiz)/COUNT(*) atlag FROM osztaly_osszfiz) SELECT * FROM osztaly_osszfiz WHERE ossz_fiz > (SELECT atlag FROM atlag_koltseg); Adatbázisok-1 (Hajas Csilla, ELTE IK) 6.előadás: SQL DDL, DCL 38

A mai témáink (folytatás) Tankönyv 8.1.-8.2. Nézettáblákról, és az adatok módosításáról a nézettáblákon keresztül, tárolt nézettáblákról (A vizsgán is lesz kérdés/feladat). --- Tankönyv 8.3.-8.4. Indexek itt nem szerepel, uis az Adatbázisok-2 kurzuson lesz részletesen Tankönyv 10.1. Jogosultságokról, SQL DCL Tankönyv 6.6. Tranzakció-kezelésről, innen csak az ACID-tranzakciók (4 tulajdonság) illetve COMMIT, ROLLBACK kell az AB1EA vizsgára! [Többi részletesen az Adatbázisok-2 kurzuson] Adatbázisok-1 (Hajas Csilla, ELTE IK) 6.előadás: SQL DDL, DCL 39

Jogosultság-kezelés (Tk.10.1) Egy UNIX-szerű fájlrendszerhez hasonlítva az analógiák: Tipikusan írás, olvasás és végrehajtási jogosultságokról van szó. Az adatbázisok lényegesen bonyolultabbak a fájlrendszereknél, ezért az SQL szabványban definiált jogosultágok is összetettebbek. Az SQL kilencféle jogosultságot definiál (SELECT, INSERT, DELETE, UPDATE, REFERENCES, USAGE, TRIGGER, EXECUTE, UNDER) Bizonyos résztvevőkhöz sorolja a jogosultságokat, például rendszergazda, korlátozott jogosultságokkal rendelkező felhasználó. Spec. PUBLIC (mindenki) Adatbázisok-1 (Hajas Csilla, ELTE IK) 6.előadás: SQL DDL, DCL 40

SQL DCL: GRANT utasítás Jogosultságok megadásának szintaktikája: GRANT <jogosultságok listája> ON <reláció vagy másféle objektum> TO <jogosultsági azonosítók listája>; Ehhez hozzáadható: WITH GRANT OPTION Adatbázisok-1 (Hajas Csilla, ELTE IK) 6.előadás: SQL DDL, DCL 41

Példa: GRANT GRANT SELECT, UPDATE(ár) ON Felszolgál TO Sally; Ez után Sally kérdéseket adhat meg a Felszolgál táblára vonatkozóan és módosíthatja az ár attribútumot. Adatbázisok-1 (Hajas Csilla, ELTE IK) 6.előadás: SQL DDL, DCL 42

Jogosultságok A relációkra vonatkozó jogosultságok: SELECT = a reláció lekérdezésének joga. INSERT = sorok beszúrásának joga. (egyetlen attribútumra is vonatkozhat) DELETE = sorok törlésének joga. UPDATE = sorok módosításának a joga. (szintén egy attribútumra is vonatkozhat) Adatbázisok-1 (Hajas Csilla, ELTE IK) 6.előadás: SQL DDL, DCL 43

Példa: jogosultságok Az alábbi utasítás esetében: INSERT INTO felh.sörök(név) SELECT sör FROM felh.felszolgál f WHERE NOT EXISTS (SELECT * FROM felh.sörök WHERE név = f.sör); azok a sörök, amelyek még nincsenek benne a sörök táblában. A beszúrás után a gyártó értéke NULL. Ehhez az INSERT utasítás végrehajtásához szükséges: SELECT jogosultság a felh (user) felszolgál és sörök tábláira és INSERT jog a Sörök tábla név attribútumára vonatkozóan. Adatbázisok-1 (Hajas Csilla, ELTE IK) 6.előadás: SQL DDL, DCL 44

Adatbázis objektumok Jogosultságokat nézetekre és materializált nézetekre vonatkozóan is megadhatunk. Egy másik fajta jogosultság lehet pl. adatbázis objektumok létrehozásának a joga: pl. táblák, nézetek, triggerek. A nézettáblák segítségével tovább finomíthatjuk az adatokhoz való hozzáférést. Adatbázisok-1 (Hajas Csilla, ELTE IK) 6.előadás: SQL DDL, DCL 45

Példa: nézettáblák és jogosultságok Tegyük fel, hogy nem szeretnénk SELECT jogosultságot adni az Dolgozók(név, cím, fizetés) táblában. Viszont a BiztDolg nézettáblán már igen: CREATE VIEW BiztDolg AS SELECT név, cím FROM Dolgozók; A BiztDolg nézettáblára vonatkozó kérdésekhez nem kell SELECT jog a Dolgozók táblán, csak a BiztDog nézettáblán. Adatbázisok-1 (Hajas Csilla, ELTE IK) 6.előadás: SQL DDL, DCL 46

Jogosultságok megadása A magunk készítette objektumok esetében az összes jogosultsággal rendelkezünk. A felhasználókat egy jogosultsági azonosító (authorization ID) alapján azonosítjuk, általában ez a bejelentkezési név, ennek felhasználásával másoknak is megadhatunk jogosultságokat. vagy a PUBLIC jogosultsági azonosítót is használhatjuk, a PUBLIC jogosultság minden felhasználó számára biztosítja az adott jogot. A WITH GRANT OPTION utasításrész lehetővé teszi, hogy aki megkapta a jogosultságot, tovább is adhassa azt. Adatbázisok-1 (Hajas Csilla, ELTE IK) 6.előadás: SQL DDL, DCL 47

Példa: Grant Option GRANT UPDATE ON Felszolgál TO Sally WITH GRANT OPTION; Ez után Sally módosíthatja a Felszolgál táblát és tovább is adhatja ezt a jogosultságot. Az UPDATE jogosultságot korlátozottan is továbbadhatja: UPDATE(ár)ON Felszolgál. Adatbázisok-1 (Hajas Csilla, ELTE IK) 6.előadás: SQL DDL, DCL 48

Jogosultságok visszavonása REVOKE <jogosultságok listája> ON <reláció vagy más objektum> FROM <jogosultsági azonosítók listája>; Az általunk kiadott jogosultságok ez által visszavonódnak. De ha máshonnan is megkapták ugyanazt a jogosultságot, akkor az még megmarad. Adatbázisok-1 (Hajas Csilla, ELTE IK) 6.előadás: SQL DDL, DCL 49

Tranzakciók az SQL-ben (Tk.6.6.) Miért van szükség tranzakciókra? Az adatbázis rendszereket általában több felhasználó és folyamat használja egyidőben. Lekérdezések és módosítások egyaránt történhetnek. Az operációs rendszerektől eltérően, amelyek támogatják folyamatok interakcióját, az adatbázis rendszereknek el kell különíteniük a folyamatokat. Adatbázisok-1 (Hajas Csilla, ELTE IK) 6.előadás: SQL DDL, DCL 50

Példa: rossz interakció Egy időben ketten töltenek fel 100 dollárt ugyanarra a számlára ATM-en keresztül. Az adatbázis rendszernek biztosítania kell, hogy egyik művelet se vesszen el. Ezzel szemben az operációs rendszerek megengedik, hogy egy dokumentumot ketten szerkesszenek egyidőben. Ha mind a ketten írnak, akkor az egyik változtatás elvész (elveszhet). Adatbázisok-1 (Hajas Csilla, ELTE IK) 6.előadás: SQL DDL, DCL 51

Tranzakciók Tranzakció = olyan folyamat, ami adatbázis lekérdezéseket, módosításokat tartalmaz. Az utasítások egy értelmes egészt alkotnak. Egyetlen utasítást tartalmaznak, vagy az SQLben explicit módon megadhatóak. Adatbázisok-1 gyakorlatokhoz és a vizsgára csak az ACID-tranzakciók 4 tulajdonságát és a COMMIT és ROLLBACK utasításokat kell tudni (amiről a következő két dián van szó), a többiről később, az Adatbázis-2 kurzuson fogunk tanulni. Adatbázisok-1 (Hajas Csilla, ELTE IK) 6.előadás: SQL DDL, DCL 52

ACID tranzakciók ACID tulajdonságok: Atomiság (atomicity): a tranzakció egységesen lefut vagy nem, vagy az összes vagy egy utasítás sem hajtódik végre. Konzisztencia (consistency): a tranzakció futása után konzisztens legyen az adatbázis, megszorításokkal, triggerekkel biztosítjuk. Elkülönítés (isolation): párhuzamos végrehajtás eredménye egymás utáni végrehajtással egyezzen meg Tartósság (durability): a befejezett tranzakció eredménye rendszerhiba esetén sem veszhet el Opcionálisan: gyengébb feltételek is megadhatóak. Adatbázisok-1 (Hajas Csilla, ELTE IK) 6.előadás: SQL DDL, DCL 53

COMMIT és ROLLBACK A COMMIT utasítás a tranzakció sikeres befejeződését eredményezi. Egy sikeresen befejeződött tranzakció a kezdete óta végrehajtott utasításainak módosításait tartósan rögzíti az adatbázisban vagyis a módosítások véglegesítődnek. A ROLLBACK utasítás megszakítja a tranzakció végrehajtását, és annak sikertelen befejeződését eredményezi. Az így befejezett tranzakció SQL utasításai által végrehajtott módosításokat a rendszer meg nem történtekké teszi Vagyis az összes utasítás visszagörgetésre kerül, a módosítások nem jelennek meg az adatbázisban. Adatbázisok-1 (Hajas Csilla, ELTE IK) 6.előadás: SQL DDL, DCL 54

Példa: egymásra ható folyamatok A Felszolgál(bár, sör, ár) táblánál tegyük fel, hogy Joe bárjában csak Bud és Miller sörök kaphatók 2.50 és 3.00 dollárért. Sally a Felszolgál táblából Joe legolcsóbb és legdrágább sörét kérdezi le. Joe viszont úgy dönt, hogy a Bud és Miller sörök helyett ezentúl Heinekent árul 3.50 dollárért. Adatbázisok-1 (Hajas Csilla, ELTE IK) 6.előadás: SQL DDL, DCL 55

Sally utasításai (max) SELECT MAX(ár) FROM Felszolgál WHERE bár = Joe bárja ; (min) SELECT MIN(ár) FROM Felszolgál WHERE bár = Joe bárja ; Adatbázisok-1 (Hajas Csilla, ELTE IK) 6.előadás: SQL DDL, DCL 56

Joe utasításai Ugyanabban a pillanatban Joe a következő utasításokat adja ki: (del) (ins) DELETE FROM Felszolgál WHERE bár = Joe bárja ; INSERT INTO Felszolgál VALUES( Joe bárja, Heineken, 3.50); Adatbázisok-1 (Hajas Csilla, ELTE IK) 6.előadás: SQL DDL, DCL 57

Átfedésben álló utasítások A (max) utasításnak a (min) kell végrehajtódnia, hasonlóan (del) utasításnak az (ins) előtt, ettől eltekintve viszont nincsenek megszorítások a sorrendre vonatkozóan, ha Sally és Joe utasításait nem gyűjtjük egy-egy tranzakcióba. Adatbázisok-1 (Hajas Csilla, ELTE IK) 6.előadás: SQL DDL, DCL 58

Példa: egy furcsa átfedés Tételezzük fel a következő végrehajtási sorrendet: (max)(del)(ins)(min). Joe árai: Utasítás: Eredmény: {2.50,3.00} (max) 3.00 {2.50,3.00} (del) (ins) {3.50} (min) 3.50 Mit lát Sally? MAX < MIN! Adatbázisok-1 (Hajas Csilla, ELTE IK) 6.előadás: SQL DDL, DCL 59

A probléma megoldása tranzakciókkal Ha Sally utasításait, (max)(min), egy tranzakcióba gyűjtjük, akkor az előbbi inkonzisztencia nem történhet meg. Joe árait ekkor egy adott időpontban látja. Vagy a változtatások előtt vagy utánuk, vagy közben, de a MAX és a MIN ugyanazokból az árakból számolódik. Adatbázisok-1 (Hajas Csilla, ELTE IK) 6.előadás: SQL DDL, DCL 60

Egy másik hibaforrás: a visszagörgetés Tegyük fel, hogy Joe a (del)(ins) és utasításokat nem, mint tranzakció hajtja végre, utána viszont úgy dönt, jobb ha visszagörgeti a módosításokat. Ha Sally az (ins) után, de visszagörgetés előtt hajtatja végre a tranzakciót, olyan értéket kap, 3.50, ami nincs is benne az adatbázisban végül. Adatbázisok-1 (Hajas Csilla, ELTE IK) 6.előadás: SQL DDL, DCL 61

Megoldás A (del)(ins) és utasításokat Joe-nak is, mint tranzakciót kell végrehajtatnia, így a változtatások akkor válnak láthatóvá, ha tranzakció egy COMMIT utasítást hajt végre. Ha a tranzakció ehelyett visszagörgetődik, akkor a hatásai sohasem válnak láthatóvá. Adatbázisok-1 (Hajas Csilla, ELTE IK) 6.előadás: SQL DDL, DCL 62

Elkülönítési szintek Az SQL négy elkülönítési szintet definiál, amelyek megmondják, hogy milyen interakciók engedélyezettek az egy időben végrehajtódó tranzakciók közt. Ezek közül egy szint ( sorbarendezhető ) = ACID tranzakciók. Minden ab rendszer a saját tetszése szerint implementálhatja a tranzakciókat. Adatbázisok-1 (Hajas Csilla, ELTE IK) 6.előadás: SQL DDL, DCL 63

Az elkülönítési szint megválasztása Az utasítás: SET TRANSACTION ISOLATION LEVEL X ahol X = 1. SERIALIZABLE 2. REPEATABLE READ 3. READ COMMITTED 4. READ UNCOMMITTED Adatbázisok-1 (Hajas Csilla, ELTE IK) 6.előadás: SQL DDL, DCL 64

Sorbarendezhető (serializable) tranzakciók Ha Sally a (max)(min), Joe a (del)(ins) tranzakciót hajtatja végre, és Sally tranzakciója SERIALIZABLE elkülönítési szinten fut, akkor az adatbázist vagy Joe módosításai előtt vagy után látja, a (del) és (ins) közötti állapotban sohasem. Adatbázisok-1 (Hajas Csilla, ELTE IK) 6.előadás: SQL DDL, DCL 65

Az elkülönítési szint választása Ez a döntés csak azt mondja meg, hogy az illető hogyan látja az adatbázist, és nem azt, hogy mások hogy látják azt. Példa: Ha Joe sorbarendezhető elkülönítési szintet használ, de Sally nem, akkor lehet, hogy Sally nem talál árakat Joe bárja mellett. azaz, mintha Sally Joe tranzakciójának közepén futtatná a sajátját. Adatbázisok-1 (Hajas Csilla, ELTE IK) 6.előadás: SQL DDL, DCL 66

Read-Commited tranzakciók Ha Sally READ COMMITTED elkülönítési szintet választ, akkor csak kommitálás utáni adatot láthat, de nem feltétlenül mindig ugyanazt az adatot. Példa: READ COMMITTED mellett megengedett a (max)(del)(ins)(min) átfedés amennyiben Joe kommitál. Sally legnagyobb megdöbbenésére: MAX < MIN. Adatbázisok-1 (Hajas Csilla, ELTE IK) 6.előadás: SQL DDL, DCL 67

Repeatable-Read tranzakciók Hasonló a read-commited megszorításhoz. Itt, ha az adatot újra beolvassuk, akkor amit először láttunk, másodszor is látni fogjuk. De második és az azt követő beolvasások után akár több sort is láthatunk. Adatbázisok-1 (Hajas Csilla, ELTE IK) 6.előadás: SQL DDL, DCL 68

Példa: ismételhető olvasás Tegyük fel, hogy Sally REPEATABLE READ elkülönítési szintet választ, a végrehajtás sorrendje: (max)(del)(ins)(min). (max) a 2.50 és 3.00 dollár árakat látja. (min) látja a 3.50 dollárt, de 2.50 és 3.00 árakat is látja, mert egy korábbi olvasáskor (max) már látta azokat. Adatbázisok-1 (Hajas Csilla, ELTE IK) 6.előadás: SQL DDL, DCL 69

Kérdés/Válasz Köszönöm a figyelmet! Kérdés/Válasz? Házi feladat: Gyakorlás az Oracle Példatár feladatai: DML-utasítások, tranzakciók (lásd 5EA) DML-utasítások: insert, update, delete (Példatár 5.fej.) Adatbázis-tranzakciók: commit, rollback, savepoint DDL-utasítások (lásd 5EA és 6EA) DDL-utasítások: adattáblák létrehozása, módosítása, integritási megszorítások (Példatár 5.fejezet folyt.) és Nézettábla létrehozása és törlése, táblák tartalmának módosítása nézettáblákon keresztül (Példatár 6.fej.) Adatbázisok-1 (Hajas Csilla, ELTE IK) 6.előadás: SQL DDL, DCL 70