La presentazione è in caricamento. Aspetta per favore

La presentazione è in caricamento. Aspetta per favore

Corso di Basi di Dati Il Linguaggio SQL Home page del corso:

Presentazioni simili


Presentazione sul tema: "Corso di Basi di Dati Il Linguaggio SQL Home page del corso:"— Transcript della presentazione:

1 Corso di Basi di Dati Il Linguaggio SQL Home page del corso:

2 Il Linguaggio SQL SQL ( Structured Query Language ) e il linguaggio di riferimento per le basi di dati relazionali. Diverse versioni del linguaggio: SQL-86 Costrutti base SQL-89 Integrita referenziale SQL-92 (SQL2) Modello relazionale, struttura a livelli SQL:1999 (SQL3) Modello ad oggetti SQL:2003 (SQL3) Nuove parti: SQL/JRT, SQL/XML SQL:2006 (SQL3) Estensione di SQL/XML SQL:2008 (SQL3) Lievi aggiunte

3 Il Linguaggio SQL Oltre ad i costrutti base di SQL2 visti fin qui, esistono molti costrutti avanzati (i) definiti in SQL3 e/o (ii) dipendenti dallo specifico DBMS. Procedure (Stored Procedures) Trigger Permessi Transazioni

4 Il Linguaggio SQL Stored Procedures Frammenti di codice SQL, con la possibilita di specificare un nome, dei parametri in ingresso e dei valori di ritorno. Procedure ModificaStipendio (MatricolaNew: varchar(20), StipendioNew: smallint) update Impiegati set Stipendio=StipendioNew where Matricola=MatricolaN Ogni DBMS offre estensioni procedurali differenti …

5 Il Linguaggio SQL DB TABELLE APPLICAZIONE ESTERNA SQL DATI DB TABELLE APPLICAZIONE ESTERNA NOME PROCEDURA + PARAMETRI DATI PROCEDURE MODELLO senza STORED PROCEDURE MODELLO con STORED PROCEDURE Efficienza Maggiore espressivita …

6 Il Linguaggio SQL Esempio: definizione di funzioni in MySQL: CREATE FUNCTION function_name RETURNS type_return … List of SQL routine statements CREATE FUNCTION echo(s CHAR(20)) RETURNS CHAR(50) RETURN(s) mysql>> SELECT echo(Hello);

7 Il Linguaggio SQL Esempio: definizione di funzioni in PostgreSQL: CREATE FUNCTION add_three_values(v1 anyelement, v2 anyelement, v3 anyelement) RETURNS anyelement AS $$ DECLARE result ALIAS for $0 BEGIN result:=v1 + v2 +v3; RETURN result END

8 Il Linguaggio SQL Le estensioni procedurali consentono di: Creare funzioni e procedure trigger-based. Aggiungere strutture di controllo al linguaggio SQL (es. cicli, strutture condizionali if then else, etc). Dichiarare variabili e tipi di dato user-defined. Definire funzioni avanzate ed ottimizzate, che sono ritenute sicure dal DBMS.

9 Il Linguaggio SQL Ogni DBMS offre una sua estensione procedurale : PL/SQL Linguaggio di Oracle Server SQL PL Linguaggio di IBM DB2 PL/pgSQL Linguaggio di PostgreSQL …

10 Il Linguaggio SQL Costrutti procedurali in PostgreSQL: Costrutti condizionali if then … else … endif IF user_id <> 0 THEN UPDATE USERS SET USERS. =v_ WHERE (USERS.user_id = user_id)

11 Il Linguaggio SQL Costrutti procedurali in PostgreSQL: Costrutti iterativi ( while ) while (Expression) LOOP statements END LOOP WHILE ncycle>0 LOOP UPDATE SALARY SET SALARY.amount=SALARY.amount -100 ncycle:=ncycle -1; END LOOP

12 Il Linguaggio SQL Costrutti procedurali in PostgreSQL: Costrutti iterativi ( for ) For record_or_row IN query LOOP statements END LOOP FOR Studente IN SELECT * FROM STUDENTI LOOP UPDATE ESAMI SET Voto=30 WHERE (Corso=Basi di Dati) END LOOP

13 Il Linguaggio SQL Oltre ad i costrutti base di SQL2 visti fin qui, esistono molti costrutti avanzati (i) definiti in SQL3 e/o (ii) dipendenti dallo specifico DBMS. Procedure (Stored Procedures) Trigger Permessi Transazioni

14 Il Linguaggio SQL NomeCodiceQuantita Xbee Radio Shield Arduino Uno Shield55652 Arduino Ethernet ORDINE Vorrei implementare un comportamento del tipo: Ogni volta che viene inserito/modificato un nuovo ordine con piu di 5 quantita nel DB viene inviata una mail al Titolare dellazienda..

15 Il Linguaggio SQL NomeCodiceQuantita Xbee Radio Shield Arduino Uno Shield Arduino Ethernet ORDINE Vorrei implementare un comportamento del tipo: Ogni volta in cui lutente fa unordine, si aggiorna la tabella Magazzino, e nel caso non ci siano piu prodotti di quel tipo, si aggiorni anche la tabella Acquisti … MAGAZZINO CodiceQuantita ACQUISTO CodiceQ.aData /2/ 2012

16 Il Linguaggio SQL Trigger (o regole attive) meccanismi di gestione della base di dati basati sul paradigma ECA (Evento/Condizione/Azione). Evento : primitive per la manipolazione dei dati ( insert, delete, update ) Condizione : Predicato booleano Azione : sequenza di istruzioni SQL, talvolta procedure SQL specifiche del DBMS.

17 Il Linguaggio SQL Trigger (o regole attive) meccanismi di gestione della base di dati basati sul paradigma ECA (Evento/Condizione/Azione). A che servono i Trigger? 1. Garantire il soddifacimento di vincoli di integrita referenziale, e/o specificare meccanismi di reazione ad hoc in caso di violazione dei vincoli!

18 NomeCodiceCrediti Basi di dati Programmazione Sistemi Operativi14556 CorsoStudenteVoto L CORSI ESAMI Q. Che accade se un valore nella tabella esterna viene cancellato o viene modificato ? A. Il vincolo di integrita referenziale nella tabella interna potrebbe non essere piu valido! Cosa fare? Il Linguaggio SQL

19 Trigger (o regole attive) meccanismi di gestione della base di dati basati sul paradigma ECA (Evento/Condizione/Azione). A che servono i Trigger? 2. Specificare regole aziendali (business rules), ossia vincoli generici sulo schema della base di dati (es. Un impiegato non puo avere un aumento di stipendio superiore al 10%, pena annullamento della transazione).

20 Il Linguaggio SQL Create trigger Nome Modo Evento on Tabella [referencing Referenza] [for each Livello] [when (IstruzioneSQL)] Istruzione/ProceduraSQL Trigger (o regole attive) meccanismi di gestione della base di dati basati sul paradigma ECA (Evento/Condizione/Azione). SINTASSI SQL3 EVENTO CONDIZIONE AZIONE

21 Il Linguaggio SQL Modo before / after Evento insert/delete/update Referencing qui possono essere inserite variabili globali per aumentare lespressivita del trigger… Livello row (Il trigger agisce a livello di righe) statement (Il trigger agisce globalmente a livello di tabella) Due modalita di esecuzione: immediata vs differita.

22 Il Linguaggio SQL CREATE TRIGGER CHECKAUMENTO BEFORE UPDATE OF CONTO ON IMPIEGATO FOR EACH ROW WHEN (NEW.STIPENDIO > OLD.STIPENDIO * 1.2) SET NEW.STIPENDIO=OLD.STIPENDIO * 1.2 Esempio di Trigger in SQL3 Modo e definito come before. Evento e definito come update. Livello e definito come row.

23 Il Linguaggio SQL Oltre ad i costrutti base di SQL2 visti fin qui, esistono molti costrutti avanzati (i) definiti in SQL3 e/o (ii) dipendenti dallo specifico DBMS. Procedure (Stored Procedures) Trigger Permessi Transazioni

24 Il Linguaggio SQL Di default, ogni risorsa appartiene allutente che lha definita … Su ciascuna risorsa sono definiti dei privilegi (grant): insert/update/delete tabelle/viste select tabelle/viste references tabelle/attributi usage domini SQL2/SQL3 prevede meccanismi di controllo di accesso alle risorse dello schema del DB.

25 Il Linguaggio SQL Il comando grant consente di assegnare privilegi su una certa risorsa ad utenti specifici. grant Privilegio on Risorsa/e to Utente/i [with grant option] Lopzione with grant option consente di propagare il privilegio ad altri utenti del sistema… grant select on Impiegati to Marco with grant option grant delete on Impiegati, Salari to Marco, Michele

26 Il Linguaggio SQL Il comando revoke consente di revocare privilegi su una certa risorsa ad utenti specifici. revoke Privilegio on Risorsa/e from Utente/i [cascade|restrict] Lopzione cascade agisce ricorsivamente sui privilegi eventualmente concessi da quellutente … revoke select on Impiegati to Marco cascade revoke delete on Impiegati, Salari to Marco, Michele

27 Il Linguaggio SQL In SQL3 e possibile definire dei ruoli per laccesso alle risorse di un database. Ruolo = Contenitore di privilegi Insert su Tabella Impiegati Select su Tabella Retribuzioni Update su Tabella Progetti ESEMPIO di RUOLO Comandi SQL3: create role/set role

28 Il Linguaggio SQL Oltre ad i costrutti base di SQL2 visti fin qui, esistono molti costrutti avanzati (i) definiti in SQL3 e/o (ii) dipendenti dallo specifico DBMS. Procedure (Stored Procedures) Trigger Permessi Transazioni

29 start transaction update SalariImpiegati set conto=conto*1.2 where (CodiceImpiegato = 123) commit work Le transazioni sono comprese tra una start transaction ed una commit/ rollback Le transazioni rappresentano unita di lavoro elementare (insiemi di istruzioni SQL) che modificano il contenuto di una base di dati. Gestione delle Transazioni

30 start transaction update SalariImpiegati set conto=conto-10 where (CodiceImpiegato = 123) if conto >0 commit work; else rollback work Le transazioni rappresentano unita di lavoro elementare (insiemi di istruzioni SQL) che modificano il contenuto di una base di dati. Le transazioni sono comprese tra una start transaction ed una commit/ rollback Gestione delle Transazioni

31 Atomicita La transazione deve essere eseguita con la regola del tutto o niente. Consistenza La transazione deve lasciare il DB in uno stato consistente, eventuali vincoli di integrita non devono essere violati. Isolamento Lesecuzione di una transazione deve essere indipendente dalle altre. Persistenza Leffetto di una transazione che ha fatto commit work non deve essere perso. PROPRIETA ACIDE DELLE TRANSAZIONI Gestione delle Transazioni

32 Gestione delle transazioni Gestione della concorrenza Gestione dell affidabilita Gestore dellaffidabilita garantisce atomicita e persistenza … COME? Usando log e checkpoint. Gestore della concorrenza garantisce lisolamento in caso di esecuzione concorrente di piu transazioni. Gestione delle Transazioni

33 T1= Read(x); x=x+1; Write(x); Commit Work T2= Read(x); x=x+1; Write(x); Commit Work In un sistema reale, le transazioni vengono eseguite in concorrenza per ragioni di efficienza / scalabilita. … Tuttavia, lesecuzione concorrente determina un insieme di problematiche che devono essere gestite … Se x=3, al termine delle due transazioni x vale 5 ( esecuzione sequenziale ) … cosa accade in caso di esecuzione concorrente ? Gestione delle Transazioni

34 Problema 1: Perdita di Aggiornamento Transazione1 (T1)Transazione2 (T2) Read(x) x=x+1 Read(x) x=x+1 Write(x) Commit work Write(x) Commit work T1 scrive 4 T2 scrive 4 Gestione delle Transazioni

35 Problema 2: Lettura sporca Transazione1 (T1)Transazione2 (T2) Read(x) x=x+1 Write(x) Read(x) Commit work Rollback work T2 legge 4! Gestione delle Transazioni

36 Problema 3: Letture incosistenti Transazione1 (T1)Transazione2 (T2) Read(x) x=x+1 Write(x) Commit work Read(x) Commit work T1 legge 3! T1 legge 4! Gestione delle Transazioni

37 Problema 4: Aggiornamento Fantasma Transazione1 (T1)Transazione2 (T2) Read(x) Read(y) y=y-100 Read(z) z=z+100 Write(y), Write(z) Commit work Read(z) s=x+y+z; commit work Vincolo: x+y+z deve essere = a 1000 Vincolo violato!! Gestione delle Transazioni

38 Date un insieme di transazioni T 1,T 2, T n, di cui ciascuna formata da un certo insieme di operazioni di scrittura ( w i ) e lettura ( r i ): Es. T 1 =r 1 (x) r 1 (y) r 1 (z) w 1 (y) … Si definisce schedule la sequenza di operazioni di lettura/scrittura di tutte le transazioni cosi come eseguite sulla base di dati: r 1 (x) r 2 (y) r 1 (y) w 4 (y) w 2 (z) … Gestione delle Transazioni

39 Uno schedule S si dice seriale se le azioni di ciascuna transazione appaiono in sequenza, senza essere inframezzate da azioni di altre transazioni. S={T 1, T 2, … T n } Schedule seriale ottenibile se: (i) Le transazioni sono eseguite uno alla volta (scenario non realistico) (ii) Le transazioni sono completamente indipendenti luna dallaltra (improbabile) Gestione delle Transazioni

40 Uno schedule S si dice serializzabile se produce lo stesso risultato di un qualunque scheduler seriale S delle stesse transazioni. Gestione delle Transazioni Schedule Serializzabili

41 I DMBS commerciali usano il meccanismo dei lock per poter effettuare una qualsiasi operazioni di lettura/scrittura su una risorsa (tabella o valore di una cella), e necessario aver precedentemente acquisito il controllo ( lock ) sulla risorsa stessa. Lock in lettura ( accesso condiviso ) Lock in scrittura ( mutua esclusione ) Gestione delle Transazioni Come implementare il controllo della concorrenza ?

42 Su ogni lock possono essere definite due operazioni : Richiesta del lock in lettura/scrittura. Rilascio del lock ( unlock ) acquisito in precedenza. Gestione delle Transazioni Liberor_lockedw_locked r_lock OK /r_locked NO /w_locked w_lock OK /w_locked NO /r_locked NO /w_locked unlockErrore OK /dipende OK /libero STATO DELLA RISORSA AZIONE

43 Lock Manager componente del DBMS responsabile di gestire i lock alle risorse del DB, e di rispondere alle richieste delle transazioni. Per ciascun oggetto x del DBMS: State( x ) stato delloggetto ( libero/r_locked/w_locked ) Active( x ) lista transazioni attive sulloggetto Queued( x ) lista transazioni bloccate sulloggetto Gestione delle Transazioni STRUTTURE DATI del LOCK MANAGER

44 Lock Manager componente del DBMS responsabile di gestire i lock alle risorse del DB, e di rispondere alle richieste delle transazioni. 1.Riceve una richiesta ( r_lock, w_lock, unlock ) da una transazione T, su un oggetto x (oggetto=tabella, colonna, etc). 2.Controlla la tabella stato/azione (slide precedente). 3.Se la risposta e OK, aggiorna lo stato della risorsa, e concede il controllo della risorsa alla transazione T. 4.Se la risposta e NO, inserisce la transazione T in una coda associata alloggetto x. Gestione delle Transazioni AZIONI DEL LOCK MANAGER

45 Gestione delle Transazioni RISORSA x LOCK MANAGER T 1 : r_lock(x) Answer to T 1 : OK ACTIVE( x ): {} QUEUED( x ): {} STATO( x ): r_locked ACTIVE( x ): {T 1 }

46 Gestione delle Transazioni RISORSA x LOCK MANAGER T 2 : r_lock(x) Answer to T 2 : OK ACTIVE( x ): {} QUEUED( x ): {} STATO( x ): r_locked ACTIVE( x ): {T 1 } ACTIVE( x ): {T 1, T 2 }

47 Gestione delle Transazioni RISORSA x LOCK MANAGER T 3 : w_lock(x) Answer to T 3 : NO ACTIVE( x ): {} QUEUED( x ): {} STATO( x ): r_locked ACTIVE( x ): {T 1 } ACTIVE( x ): {T 1, T 2 } QUEUED( x ): {T 3 }

48 Two Phase Lock (2PL) Una transazione, dopo aver rilasciato un lock, non puo acquisirne un altro. Gestione delle Transazioni In pratica, una transazione acquisisce prima tutti i lock delle risorse di cui necessita … Time Risorse

49 Gestione delle Transazioni T 1 = r(x), w(y), Commit T 2 = r(y), Commit T1T1 T2T2 r_lock(x) r(x) unlock(x) r_lock(y) r(y) unlock(y) Commit w_lock(y) w(y) unlock(y) Commit TRANSAZIONI SCHEDULE A. NO!

50 Gestione delle Transazioni T 1 = r(x), w(y), Commit T 2 = r(y), Commit T1T1 T2T2 r_lock(x) r(x) w_lock(y) r_lock(y) w(y) unlock(y) unlock(x) r(y) unlock(y) Commit TRANSAZIONI SCHEDULE A. SI!

51 Two Phase Lock (2PL) Una transazione, dopo aver rilasciato un lock, non puo acquisirne un altro. Gestione delle Transazioni Ogni schedule che rispetta il 2PL e anche serializzabile (perche ?). Ogni schedule che rispetta il 2PL non puo incorrere in configurazioni erronee dovute a: aggiornamento fantasma, lettura inconsistente, perdita di aggiornamento … che accade in caso di lettura sporca ?

52 Gestione delle Transazioni T 1 = r(x), w(y), Commit T 2 = r(y), Commit T1T1 T2T2 r_lock(x) r(x) w_lock(y) r_lock(y) w(y) unlock(y) unlock(x) r(y) unlock(y) Abort Commit TRANSAZIONI SCHEDULE

53 Strict Two Phase Lock (2PL) I lock di una transazione sono rilasciati solo dopo aver effettuato le operazioni di commit/abort. Gestione delle Transazioni Variante strict del 2PL, utilizzato in alcuni DBMS commerciali. Uno schedule che rispetta lo S2PL eredita tutte le proprieta del 2PL, ed inoltre NON presenta anomalie causate da problemi di lettura sporca.

54 Gestione delle Transazioni T 1 = r(x), w(y), Commit T 2 = r(y), Commit T1T1 T2T2 r_lock(x) r(x) w_lock(y) r_lock(y) w(y) Abort unlock(x) unlock(y) r(y) Commit unlock(y) TRANSAZIONI SCHEDULE A. SI!

55 PROBLEMA: I protocolli 2PL e S2PL possono generare schedule con situazioni di deadlock. Gestione delle Transazioni T 1 = r(x), w(y), Commit T 2 = r(y), w(x), Commit TRANSAZIONI SCHEDULE T1T1 T2T2 r_lock(x) r_lock(y) r(x) r(y) w_lock(y) w_lock(x)

56 Per gestire le situazioni di deadlock causate dal Lock Manager, si possono usare tre tecniche : 1.Uso dei timeout ogni operazione di una transazione ha un timeout entro il quale deve essere completata, pena annullamento ( abort ) della transazione stessa. T 1 : r_lock(x,4000), r(x), w_lock(y,2000), w(y), commit, unlock(x), unlock(y) Gestione delle Transazioni

57 Per gestire le situazioni di deadlock causate dal Lock Manager, si possono usare tre tecniche : 2. Deadlock avoidance prevenire le configurazioni che potrebbero portare ad un dealock … COME? Lock/Unlock di tutte le risorse allo stesso tempo. Utilizzo di time-stamp o di classi di priorita tra transazioni (problema: puo determinare starvation !) Gestione delle Transazioni

58 Per gestire le situazioni di deadlock causate dal Lock Manager, si possono usare tre tecniche : 3. Deadlock detection utilizzare algoritmi per identificare eventuali situazioni di deadlock, e prevedere meccanismi di recovery dal deadlock Grafo delle richieste/risorse utilizzato per identificare la presenza di cicli (corrispondenti a deadlock) In caso di ciclo, si fa abort delle transazioni coinvolte nel ciclo in modo da eliminare la mutua dipendenza … Gestione delle Transazioni

59 Un metodo alternativo al 2PL per la gestione della concorrenza in un DBMS prevede lutilizzo dei time- stamp delle transazioni (metodo TS ). Ad ogni transazione si associa un timestamp che rappresenta il momento di inizio della transazione. Ogni transazione non puo leggere o scrivere un dato scritto da una transazione con timestamp maggiore. Ogni transazione non puo scrivere su un dato gia letto da una transazione con timestamp maggiore. Gestione delle Transazioni

60 Un metodo alternativo al 2PL per la gestione della concorrenza in un DBMS prevede lutilizzo dei time- stamp delle transazioni (metodo TS ). Ad ogni oggetto x si associano due indicatori : WTM ( x ) timestamp della transazione che ha fatto lultima scrittura su x. RTM ( x ) timestamp dellultima transazione (ultima=con t piu alto) che ha letto x. Gestione delle Transazioni

61 Lo scheduler di sistema verifica se uneventuale azione ( r t (x) o w t (x) ) eseguita da una transazione T con timestamp t puo essere eseguita o meno: r t (x) Se t =WTM(x), la richiesta viene eseguita, ed RTM(x) viene aggiornato al massimo tra il valore precedente di RTM(x) e t stesso. Gestione delle Transazioni

62 Lo scheduler di sistema verifica se uneventuale azione ( r t (x) o w t (x) ) eseguita da una transazione T con timestamp t puo essere eseguita o meno: w t (x) Se t

63 ESEMPIO : RTM(x)=6, WTM(x)=3 Gestione delle Transazioni T 5 : r 5 (x) OK, RTM(x)=6 T 9 : w 9 (x) OK, WTM(x)=9 T 6 : w 6 (x) NO, T 6 uccisa T 8 : r 8 (x) NO, T 8 uccisa T 10 : r 10 (x) OK, RTM(x)=10

64 In SQL-3, ed in molti DBMS commerciali (DB2, MySQL, PostgreSQL, Oracle, etc) sono definiti quattro livelli di isolamento tra transazioni: Gestione delle Transazioni LivelloDescrizione read uncommitted (read only) La transazione non emette lock in lettura, e non rispetta lock esclusivi da altre transazioni. read committed Richiede lock condivisi per effettuare le letture. repeteable read Applica il protocollo S2PL anche in lettura. serializable Applica il protocollo S2PL con lock di predicato. S2PL utilizzato per le operazioni di scrittura, da tutti i livelli.

65 SINTASSI MySQL Gestione delle Transazioni Iniziare una transazione e completarla: START TRANSACTION … (Statements SQL) COMMIT/ROLLBACK Configurare livello di isolamento di esecuzione: SET TRANSACTION ISOLATION LEVEL REPEATABLE READ | READ COMMITTED | READ UNCOMMITTED | SERIALIZABLE

66 SINTASSI MySQL Gestione delle Transazioni Le transazioni sono utilizzabili solo su tabelle di tipo InnoDB (ACID-compliant). E possibile gestire manualmente le operazioni di lock su tabelle (non consigliabile su tabelle di tipo InnoDB ): LOCK TABLES tabella { READ | WRITE }


Scaricare ppt "Corso di Basi di Dati Il Linguaggio SQL Home page del corso:"

Presentazioni simili


Annunci Google