structured query language: sql
DESCRIPTION
Structured Query Language: SQL. Maurizio Fermeglia Università di Trieste email: [email protected]. SQL. Structured Query Language è un linguaggio con varie funzionalità: contiene sia il DDL sia il DML; esistono varie versioni dell’SQL; - PowerPoint PPT PresentationTRANSCRIPT
20 April 2023 - slide 2Linguaggio SQL
SQL
Structured Query Languageè un linguaggio con varie funzionalità:
contiene sia il DDL sia il DML;
esistono varie versioni dell’SQL;vediamo gli aspetti essenziali non i dettagli
20 April 2023 - slide 3Linguaggio SQL
La storia di SQLDr. Codd + IBM = SYSTEM/R=SEQUEL (1970-74)ORACLE (1979)Berkeley + SQL = INGRES (1980)IBM: SQL/DS e DB2 (1983)dal 1983 ca., “standard di fatto” ANSI SQL1 Standard (1986)Sybase esce con RDBMS (1986)SQL Access group pubblica le specifiche ODBC (1991)ANSI SQL2 Standard (1992)ODBC standard in 19931996 specifiche interrogazione OLAP1999 standard SQL3 SQL 99(… scarso interesse industriale)200n SQL 200n nuovo che introduce tante novità compreso SQL XML SQLJ standard SQL all‘interno di programmi Java
20 April 2023 - slide 4Linguaggio SQL
Standard SQLThe following is a short, incomplete history of the
SQL Standards – ISO/IEC 90751987 – Initial ISO/IEC Standard1989 – Referential Integrity1992 – SQL2 1995 SQL/CLI (ODBC) 1996 SQL/PSM – Procedural Language extensions
1999 – User Defined Types2003 – SQL/XML2008 – Expansions and corrections2011 (or 2012) System Versioned and Application Time Period Tables
April 20, 2023 Metadata Open Forum 4
20 April 2023 - slide 5Linguaggio SQL
SQL standard 1 2SQL/1986 • SQL/1989 • SQL/1992
• Basic features, that is • SQL/1986 plus • SQL/1989 plus
• Tables • Columns • Views • Basic relational operations • Some integrity constraints • Language bindings to
COBOL, FORTRAN, C, etc.
• Partial Referential Integrity
• Entry Level SQL92 • Enhanced constraints • Full Referential Integrity • Table constraints • Schema manipulation • Row & Table constraints • • Beyond Entry Level SQL92 • Assertions • Bit data type • CASE • Character Sets • Connection Management • DATETIME • Domains • Dynamic SQL • Get Diagnostics • Grouped operations • Information Schema • Multiple module support • National character sets • Natural joins (inner & outer) • Subqueries in check clauses • Temporary tables • Transaction Management • Union and intersect
20 April 2023 - slide 6Linguaggio SQL
SQL 99 standard: carattersiticheSQL 1999 Feature • Brief Description
• SQL Data Type: String (BLOB, or Character (CLOB))
• The ability to store either bit images or large character documents
• SQL Data Type: Boolean • The ability to specify boolean data types, logic, and supporting rules
• SQL Data Type: Ref Types • The ability to have a DBMS generated or column value based pointer as a reference between rows of different tables.
• SQL Data Type: Arrays • The ability to have an ordered list of values within a column. Each value may be a RefType. Each may also be a ROW data structure
• SQL Data Type: ROW Data Structures
• The ability to have groups of “subcolumns” within a column. Each may be an array or a RefType
• SQL Data Type: User Defined Types
• The ability to completely define an non-traditional data type such as nautical distance.
• Triggers • The ability to specify the instigation of an action as a consequence of a state change in the database
• Savepoints • The ability to have cascading sets of “soft” commits that can be rolled back until there is a traditional hard-commit
• Roles Security Enhancement • The ability to define additional layers and kinds of security and the assignment of persons fulfilling the defined roles
• Recursion • The ability to fully model nested relationships such as hierarchies for organizations.
• Information Schema • A virtual database defined as virtual tables and real SQL views on the virtual tables that contain the complete set of metadata in support of defined databases.
• Call Level Interface • The complete specification of a DBMS vendor independent set of database access routines similar to that contained in the Microsoft ODBC specification.
• SQL Multi-Media: Full Text • The complete set of data structures, special full-text operations and SQL routines that support the loading, accessing, and maintenance of full-text type of data such as books, manuscripts.
• SQL Multi-Media: Spatial • The complete library or set of data structures and routines that support spatial data types and operations on those data types
• SQL Multi-Media: Still Image • The complete library or set of data structures and routines that support still image data types and operations on those data types
• SQL Programming Language • A complete SQL DBMS encapsulated programming language that includes traditional assignment, looping, branching, If..Then...Else, and CASE type constructs.
• Transaction, Connection, Session, and Diagnostics Management
• The ability to specify sessions and the management of those sessions in support of centralized or distributed type batch-type processing.
• SQL/MED • The routines and facilities in support of the management of types and classes of data that exists outside the domain of
20 April 2023 - slide 7Linguaggio SQL
SQL standard ‘in fieri’SQL 2003: introduce l’uso di XML (poche funzionalità), funzioni di finestre, valori autogenerati (colonne identity)SQL 2006: introduce Xquery (ISO/IEC 9075-14:2006 ) e completa l’uso di XML: import e memorizzazioen di XML in DB, manipolazione di XML.SQL:2008 Legalizza uso di ORDER BY al di fuori della definizione dei corsori. Aggiunge INSTEAD OF nei triggers. Aggiunge TRUNCATE statement
Interessante link: http://troels.arvin.dk/db/rdbms/
20 April 2023 - slide 8Linguaggio SQL
SQL CONTROLLA TUTTE LE FUNZIONI DI DBMS
Definizione dei dati (struttura e relazioni)Estrazione dei datiManipolazione di datiControllo degli accessi (privilegi di accesso)Condivisione dei datiIntegrità dei dati
DBMS Data Base
Dati
SQL Query
20 April 2023 - slide 9Linguaggio SQL
Il ruolo di SQL (che cosa è)
Linguaggio di Query interattivoLinguaggio di programmazione per data baseLinguaggio di amministrazione di data baseLinguaggio per il client/serverLinguaggio per la gestione di data base distribuitiLinguaggio per la gestione di gateway
20 April 2023 - slide 10Linguaggio SQL
CARATTERISTICHE E BENEFICI....Indipendenza dai venditori di HW e SWPortabilità attraverso varie piattoforme HWCoperto da standard internazioneli SQL1 ed SQL2 e SQL3Strategico per IBM – Oracle – Micrsoft - …Linguaggio per data base relazionali (unico)Strutturo ad alto livello (English-like)Linguaggio interattivoLinguaggio programmatico (Statico - Dinamico - API)In grado di fornire viste diverse del data baseLinguaggio completo (IF, triggers, ...) con T SQL e PL SQLDefinizione dinamica dei dati (anche quando in uso)Client / server
SQL è strategico per molti Hw e Sw
20 April 2023 - slide 12Linguaggio SQL
IL MITO DELLA PORTABILITA’
Ovvero ... non e’ vero che si puo fare tuttoCodici di errore non sono standardI tipi di dati non sone sempre supportatiLe tabelle di sistema non sono ugualiGli standard definiscono solo il SQL via programma, non l’interattivoDefinisce solo lo Static Embedded StandardAlcune differenze semantiche (funzioni, NULL)Sorting secondo ASCII o EBCDIC (collating sequence e codici)Struttura delle tabelle
20 April 2023 - slide 15Linguaggio SQL
SQL LE BASI
Statements di manipolazione dei dati (DML) SELECT - INSERT - DELETE - UPDATE
Statements di definizione dei dati (DDL) CREATE/DROP/ALTER TABLE, VIEW, INDEX
Statements di accesso GRANT e REVOKE
Statements di per processi transazionali COMMIT - ROLLBACK
Statements programmatici DECLARE - OPEN - FETCH - CLOSE
20 April 2023 - slide 16Linguaggio SQL
SQL: Le convenzioni
Sui NOMISui TIPI DI DATI (interi - testo ,...)Su COSTANTISu ESPRESSIONISu FUNZIONI
20 April 2023 - slide 17Linguaggio SQL
Definizione dei dati in SQL
Istruzione CREATE TABLE: definisce uno schema di relazione e ne crea un’istanza vuota specifica attributi, domini e vincoli
20 April 2023 - slide 18Linguaggio SQL
CREATE TABLE, esempioCREATE TABLE Impiegato(
Matricola CHAR(6) PRIMARY KEY, Nome CHAR(20) NOT NULL,
Cognome CHAR(20) NOT NULL, Dipart CHAR(15),Stipendio NUMERIC(9) DEFAULT 0, FOREIGN KEY(Dipart) REFERENCES Dipartimento(NomeDip),
UNIQUE (Cognome,Nome) )
20 April 2023 - slide 19Linguaggio SQL
Domini Domini elementari (predefiniti)Domini definiti dall'utente (semplici, ma riutilizzabili)
Domini elementariCarattere: singoli caratteri o stringhe, anche di lunghezza variabile Bit: singoli booleani o stringheNumerici, esatti e approssimatiData, ora, intervalli di tempoIntrodotti in SQL:1999:
Boolean BLOB, CLOB (binary/character large object): per grandi immagini e testi
20 April 2023 - slide 20Linguaggio SQL
Definizione di domini
Istruzione CREATE DOMAIN: definisce un dominio (semplice), utilizzabile in definizioni di
relazioni, anche con vincoli e valori di default
CREATE DOMAIN, esempio
CREATE DOMAIN Voto AS SMALLINT DEFAULT NULLCHECK ( value >=18 AND value <= 30 )
20 April 2023 - slide 21Linguaggio SQL
Vincoli intrarelazionaliNOT NULL UNIQUE definisce chiaviPRIMARY KEY: chiave primaria (una sola, implica NOT NULL)CHECK, vedremo più avanti
UNIQUE e PRIMARY KEY
due forme: nella definzione di un attributo, se forma da solo la chiave come elemento separato
20 April 2023 - slide 22Linguaggio SQL
CREATE TABLE, esempioCREATE TABLE Impiegato(
Matricola CHAR(6) PRIMARY KEY, Nome CHAR(20) NOT NULL,
Cognome CHAR(20) NOT NULL, Dipart CHAR(15),Stipendio NUMERIC(9) DEFAULT 0, FOREIGN KEY(Dipart) REFERENCES Dipartimento(NomeDip),
UNIQUE (Cognome,Nome) )
20 April 2023 - slide 23Linguaggio SQL
Matricola CHAR(6) PRIMARY KEY
Matricola CHAR(6),…,PRIMARY KEY (Matricola)
PRIMARY KEY, alternative
20 April 2023 - slide 24Linguaggio SQL
CREATE TABLE, esempioCREATE TABLE Impiegato(
Matricola CHAR(6) PRIMARY KEY, Nome CHAR(20) NOT NULL,
Cognome CHAR(20) NOT NULL, Dipart CHAR(15),Stipendio NUMERIC(9) DEFAULT 0, FOREIGN KEY(Dipart) REFERENCES Dipartimento(NomeDip),
UNIQUE (Cognome,Nome) )
20 April 2023 - slide 25Linguaggio SQL
Chiavi su più attributi, attenzione
Nome CHAR(20) NOT NULL, Cognome CHAR(20) NOT NULL, UNIQUE (Cognome,Nome),
Nome CHAR(20) NOT NULL UNIQUE, Cognome CHAR(20) NOT NULL UNIQUE,
Non è la stessa cosa!
20 April 2023 - slide 26Linguaggio SQL
Vincoli interrelazionaliCHECK, vedremo più avanti REFERENCES e FOREIGN KEY permettono di definire vincoli di integrità referenziale di nuovo due sintassi
per singoli attributi su più attributi
E' possibile definire politiche di reazione alla violazione
20 April 2023 - slide 27Linguaggio SQL
Matricola
3987
3295
9345
Vigili Cognome
Rossi
Neri
Neri
Nome
Luca
Piero
Mario
Mori Gino7543
InfrazioniCodice
34321
73321
64521
53524
Data
1/2/95
4/3/95
5/4/96
5/2/98
Vigile
3987
3295
3295
9345
Prov Numero
MI
TO
PR
PR
39548K
E39548
839548
839548
20 April 2023 - slide 28Linguaggio SQL
InfrazioniCodice
34321
73321
64521
53524
Data
1/2/95
4/3/95
5/4/96
5/2/98
Vigile
3987
3295
3295
9345
Prov Numero
MI
TO
PR
PR
39548K
E39548
839548
839548
Auto Prov Numero
MI
TO
PR
39548K
E39548
839548
Cognome
Rossi
Rossi
Neri
Nome
Mario
Mario
Luca
20 April 2023 - slide 29Linguaggio SQL
CREATE TABLE, esempioCREATE TABLE Infrazioni(
Codice CHAR(6) NOT NULL PRIMARY KEY, Data DATE NOT NULL, Vigile INTEGER NOT NULL
REFERENCES Vigili(Matricola), Provincia CHAR(2), Numero CHAR(6) , FOREIGN KEY(Provincia, Numero)
REFERENCES Auto(Provincia, Numero) )
20 April 2023 - slide 30Linguaggio SQL
Modifiche degli schemi
ALTER DOMAINALTER TABLEDROP DOMAINDROP TABLE...
20 April 2023 - slide 31Linguaggio SQL
Definzione degli indici
è rilevante dal punto di vista delle prestazionima è a livello fisico e non logicoin passato era importante perché in alcuni sistemi era l'unico mezzo per definire chiaviCREATE INDEX
Vedremo dettagli nella progettazione fisica
20 April 2023 - slide 32Linguaggio SQL
DDL, in pratica
In molti sistemi si utilizzano strumenti diversi dal codice SQL per definire lo schema della base di dati
20 April 2023 - slide 33Linguaggio SQL
SQL, operazioni sui dati
interrogazione: SELECT
modifica: INSERT, DELETE, UPDATE
20 April 2023 - slide 34Linguaggio SQL
Istruzione SELECT (versione base)
SELECT ListaAttributiFROM ListaTabelle[ WHERE Condizione ]
"target list"clausola FROM clausola WHERE
20 April 2023 - slide 35Linguaggio SQL
selezione
proiezione
20 April 2023 - slide 36Linguaggio SQL
Nome Età
Persone
RedditoAndrea 27
Maria 55Anna 50
Filippo 26Luigi 50
Franco 60Olga 30
Sergio 85Luisa 75
Aldo 2521
4235304020413587
15
MadreMaternità FiglioLuisa
AnnaAnnaMariaMaria
LuisaMaria
OlgaFilippoAndrea
Aldo
Luigi
PadrePaternità Figlio
LuigiLuigi
FrancoFranco
SergioOlga
FilippoAndrea
Aldo
Franco
20 April 2023 - slide 37Linguaggio SQL
Selezione e proiezione
Nome e reddito delle persone con meno di trenta anni
PROJNome, Reddito(SELEta<30(Persone))
select nome, redditofrom personewhere eta < 30
20 April 2023 - slide 38Linguaggio SQL
Nome Età
Persone
RedditoAndrea 27 21
Maria 55 42Anna 50 35
Filippo 26 30Luigi 50 40
Franco 60 20Olga 30 41
Sergio 85 35Luisa 75 87
Aldo 25 15Andrea 27 21
Aldo 25 15
Filippo 26 30
Andrea 27 21Aldo 25 15
Filippo 26 30
211530
Reddito
20 April 2023 - slide 39Linguaggio SQL
SELECT, abbreviazioni
select nome, redditofrom personewhere eta < 30
select p.nome as nome, p.reddito as reddito
from persone pwhere p.eta < 30
20 April 2023 - slide 40Linguaggio SQL
Selezione, senza proiezione
Nome, età e reddito delle persone con meno di trenta anni
SELEta<30(Persone)
select *from personewhere eta < 30
20 April 2023 - slide 41Linguaggio SQL
SELECT, abbreviazioni
select *from personewhere eta < 30
select nome, età, redditofrom personewhere eta < 30
20 April 2023 - slide 42Linguaggio SQL
Proiezione, senza selezione
Nome e reddito di tutte le personePROJNome, Reddito(Persone)
select nome, redditofrom persone
20 April 2023 - slide 43Linguaggio SQL
SELECT, abbreviazioni
R(A,B)
select *from R
equivale (intuitivamente) a
select X.A as A, X.B as Bfrom R Xwhere true
20 April 2023 - slide 44Linguaggio SQL
Espressioni nella target list
select Reddito/2 as redditoSemestralefrom Personewhere Nome = 'Luigi'
20 April 2023 - slide 45Linguaggio SQL
Condizione complessa
select *from personewhere reddito > 25
and (eta < 30 or eta > 60)
20 April 2023 - slide 46Linguaggio SQL
Condizione “LIKE”
Le persone che hanno un nome che inizia per 'A' e ha una 'd' come terza lettera
select * from persone where nome like 'A_d%'
20 April 2023 - slide 47Linguaggio SQL
Cognome Filiale EtàMatricola
Neri Milano 455998Rossi Roma 327309
Bruni Milano NULL9553
Impiegati
Neri Milano 455998Bruni Milano NULL9553
SEL Età > 40 OR Età IS NULL (Impiegati)
Neri Milano 455998Bruni Milano NULL9553
Gestione dei valori nulli
Gli impiegati la cui età è o potrebbe essere maggiore di 40
20 April 2023 - slide 48Linguaggio SQL
Gli impiegati la cui età è o potrebbe essere maggiore di 40
SEL Età > 40 OR Età IS NULL (Impiegati)
select *from impiegatiwhere eta > 40 or eta is null
20 April 2023 - slide 49Linguaggio SQL
Selezione, proiezione e join
Istruzioni SELECT con una sola relazione nella clausola FROM permettono di realizzare:
selezioni, proiezioni, ridenominazioni
con più relazioni nella FROM si realizzano join (e prodotti cartesiani)
20 April 2023 - slide 54Linguaggio SQL
SQL: esecuzione delle interrogazioni
Le espressioni SQL sono dichiarative e noi ne stiamo vedendo la semanticaIn pratica, i DBMS eseguono le operazioni in modo efficiente, ad esempio:
eseguono le selezioni al più presto se possibile, eseguono join e non prodotti cartesiani
20 April 2023 - slide 55Linguaggio SQL
SQL: speciifca delle interrogazioni
La capacità dei DBMS di "ottimizzare" le interrogazioni, rende (di solito) non necessario preoccuparsi dell'efficienza quando si specifica un'interrogazioneÈ perciò più importante preoccuparsi della chiarezza (anche perché così è più difficile sbagliare …)
20 April 2023 - slide 56Linguaggio SQL
Proiezione, attenzione
Cognome Filiale StipendioMatricola
Neri Milano 645998Neri Napoli 557309
Rossi Roma 645698Rossi Roma 449553
• cognome e filiale di tutti gli impiegati
PROJ Cognome, Filiale (Impiegati)
20 April 2023 - slide 57Linguaggio SQL
Cognome Filiale
Neri MilanoNeri Napoli
Rossi Roma
Cognome Filiale
Neri MilanoNeri Napoli
Rossi RomaRossi Roma
selectcognome, filiale
from impiegati
select distinctcognome, filiale
from impiegati
20 April 2023 - slide 58Linguaggio SQL
Nome Età
Persone
RedditoAndrea 27
Maria 55Anna 50
Filippo 26Luigi 50
Franco 60Olga 30
Sergio 85Luisa 75
Aldo 2521
4235304020413587
15
MadreMaternità FiglioLuisa
AnnaAnnaMariaMaria
LuisaMaria
OlgaFilippoAndrea
Aldo
Luigi
PadrePaternità Figlio
LuigiLuigi
FrancoFranco
SergioOlga
FilippoAndrea
Aldo
Franco
20 April 2023 - slide 59Linguaggio SQL
Selezione, proiezione e joinI padri di persone che guadagnano più di venti milioni
PROJPadre(paternita JOIN Figlio =Nome
SELReddito>20 (persone))
select distinct padrefrom persone, paternitawhere figlio = nome and reddito > 20
20 April 2023 - slide 60Linguaggio SQL
Join naturale
Padre e madre di ogni persona
paternita JOIN maternita
select paternita.figlio,padre, madrefrom maternita, paternitawhere paternita.figlio = maternita.figlio
20 April 2023 - slide 61Linguaggio SQL
Le persone che guadagnano più dei rispettivi padri; mostrare nome, reddito e reddito del padre
PROJNome, Reddito, RP (SELReddito>RP
(RENNP,EP,RP Nome,Eta,Reddito(persone)JOINNP=Padre
(paternita JOIN Figlio =Nome persone)))
select f.nome, f.reddito, p.redditofrom persone p, paternita, persone fwhere p.nome = padre and
figlio = f.nome andf.reddito > p.reddito
20 April 2023 - slide 62Linguaggio SQL
SELECT, con ridenominazione del risultato
select figlio, f.reddito as reddito, p.reddito as redditoPadre
from persone p, paternita, persone fwhere p.nome = padre and figlio = f.nome
and .reddito > p.reddito
20 April 2023 - slide 63Linguaggio SQL
Join esplicitoPadre e madre di ogni persona
select paternita.figlio,padre, madrefrom maternita, paternitawhere paternita.figlio = maternita.figlio
select madre, paternita.figlio, padre from maternita join paternita on
paternita.figlio = maternita.figlio
20 April 2023 - slide 64Linguaggio SQL
SELECT con join esplicito, sintassiSELECT …FROM Tabella { … JOIN Tabella ON CondDiJoin }, …[ WHERE AltraCondizione ]
20 April 2023 - slide 65Linguaggio SQL
Le persone che guadagnano più dei rispettivi padri; mostrare nome, reddito e reddito del padre
select f.nome, f.reddito, p.redditofrom persone p, paternita, persone fwhere p.nome = padre and
figlio = f.nome andf.reddito > p.reddito
select f.nome, f.reddito, p.redditofrom persone p join paternita on p.nome = padre
join persone f on figlio = f.nome
where f.reddito > p.reddito
20 April 2023 - slide 66Linguaggio SQL
Ulteriore estensione: join naturale(meno diffuso)
PROJFiglio,Padre,Madre(paternita JOIN Figlio = Nome REN Nome=Figlio(maternita))
paternita JOIN maternita
select madre, paternita.figlio, padre from maternita join paternita on
paternita.figlio = maternita.figlio
select madre, paternita.figlio, padre from maternita natural join paternita
20 April 2023 - slide 67Linguaggio SQL
Join esterno: "outer join"Padre e, se nota, madre di ogni persona
select paternita.figlio, padre, madrefrom paternita left join maternita
on paternita.figlio = maternita.figlio
select paternita.figlio, padre, madrefrom paternita left outer join maternita
on paternita.figlio = maternita.figlio
outer e' opzionale
20 April 2023 - slide 68Linguaggio SQL
Outer joinselect paternita.figlio, padre, madrefrom maternita join paternita
on maternita.figlio = paternita.figlio
select paternita.figlio, padre, madrefrom maternita left outer join paternita
on maternita.figlio = paternita.figlio
select paternita.figlio, padre, madrefrom maternita full outer join paternita
on maternita.figlio = paternita.figlio
20 April 2023 - slide 69Linguaggio SQL
Ordinamento del risultato
Nome e reddito delle persone con meno di trenta anni in ordine alfabetico
select nome, redditofrom personewhere eta < 30order by nome
20 April 2023 - slide 70Linguaggio SQL
Persone
Nome RedditoAndrea 21
Aldo 15Filippo 30
Persone
Nome Reddito
Andrea 21Aldo 15
Filippo 30
select nome, redditofrom personewhere eta < 30
select nome, redditofrom personewhere eta < 30order by nome
20 April 2023 - slide 71Linguaggio SQL
Operatori aggregati• Nelle espressioni della target list possiamo avere anche
espressioni che calcolano valori a partire da insiemi di ennuple: conteggio, minimo, massimo, media, totale sintassi base (semplificata):
Funzione ( [ DISTINCT ] * )Funzione ( [ DISTINCT ] Attributo )
20 April 2023 - slide 72Linguaggio SQL
Operatori aggregati: COUNT• Il numero di figli di Franco
select count(*) as NumFigliDiFrancofrom Paternitawhere Padre = 'Franco'
l’operatore aggregato (count) viene applicato al risultato dell’interrogazione:
select * from Paternitawhere Padre = 'Franco'
20 April 2023 - slide 73Linguaggio SQL
PadrePaternità Figlio
LuigiLuigi
SergioOlga
FilippoFrancoFranco
AndreaAldo
Franco
FrancoFranco
AndreaAldo
NumFigliDiFranco2
20 April 2023 - slide 74Linguaggio SQL
COUNT e valori nulliselect count(*) from persone
select count(reddito) from persone
select count(distinct reddito) from persone
Nome EtàPersone RedditoAndrea 27
Maria 55Anna 50
Aldo 2521
2135
NULL
20 April 2023 - slide 75Linguaggio SQL
Altri operatori aggregati
SUM, AVG, MAX, MIN
Media dei redditi dei figli di Franco
select avg(reddito) from persone join paternita on nome=figlio where padre='Franco'
20 April 2023 - slide 76Linguaggio SQL
Operatori aggregati e valori nulli
select avg(reddito) as redditomediofrom persone
Nome EtàPersone RedditoAndrea 27
Maria 55Anna 50
Aldo 2530
3636
NULL
20 April 2023 - slide 77Linguaggio SQL
Operatori aggregati e target listun’interrogazione scorretta:
select nome, max(reddito)from persone
di chi sarebbe il nome? La target list deve essere omogenea
select min(eta), avg(reddito)from persone
20 April 2023 - slide 78Linguaggio SQL
Le funzioni possono essere applicate a partizioni delle relazioniClausola GROUP BY:
GROUP BY listaAttributi
Operatori aggregati e raggruppamenti
20 April 2023 - slide 79Linguaggio SQL
Il numero di figli di ciascun padre
select padre, count(*) AS NumFiglifrom paternitagroup by Padre
Operatori aggregati e raggruppamenti
Padrepaternita Figlio
LuigiLuigi
SergioOlga
FilippoFrancoFranco
AndreaAldo
Franco Padre NumFigli
LuigiSergio
2Franco 2
1
20 April 2023 - slide 80Linguaggio SQL
Semantica di interrogazioni con operatori aggregati e raggruppamenti
1. interrogazione senza group by e senza operatori aggregati
select *from paternita
2. si raggruppa e si applica l’operatore aggregato a ciascun gruppo
20 April 2023 - slide 81Linguaggio SQL
Raggruppamenti e target listscorretta
select padre, avg(f.reddito), p.redditofrom persone f join paternita on figlio = nome join
persone p on padre =p.nomegroup by padre
correttaselect padre, avg(f.reddito), p.redditofrom persone f join paternita on figlio = nome join
persone p on padre =p.nomegroup by padre, p.reddito
20 April 2023 - slide 82Linguaggio SQL
Condizioni sui gruppiI padri i cui figli hanno un reddito medio maggiore di 25
select padre, avg(f.reddito)from persone f join paternita on figlio = nome group by padre having avg(f.reddito) > 25
20 April 2023 - slide 83Linguaggio SQL
WHERE o HAVING?I padri i cui figli sotto i 30 anni hanno un reddito medio maggiore di 20
select padre, avg(f.reddito)from persone f join paternita on figlio = nomewhere eta < 30 group by padre having avg(f.reddito) > 25
20 April 2023 - slide 84Linguaggio SQL
Sintassi, riassumiamo
SelectSQL ::= select ListaAttributiOEspressionifrom ListaTabelle[ where CondizioniSemplici ][ group by ListaAttributiDiRaggruppamento ][ having CondizioniAggregate ][ order by ListaAttributiDiOrdinamento ]
20 April 2023 - slide 85Linguaggio SQL
Unione, intersezione e differenzaLa select da sola non permette di fare unioni; serve un costrutto esplicito:
select … union [all]select ...
i duplicati vengono eliminati (a meno che si usi all); anche dalle proiezioni!
20 April 2023 - slide 86Linguaggio SQL
Notazione posizionale!select padre from paternitaunionselect madrefrom maternita
quali nomi per gli attributi del risultato? nessuno quelli del primo operando …
20 April 2023 - slide 87Linguaggio SQL
Luisa
AnnaAnnaMariaMaria
LuisaMaria
OlgaFilippoAndrea
Aldo
Luigi
Figlio
LuigiLuigi
FrancoFranco
SergioOlga
FilippoAndrea
Aldo
Franco
Luisa
AnnaAnnaMariaMaria
LuisaMaria
OlgaFilippoAndrea
Aldo
Luigi
Padre Figlio
LuigiLuigi
FrancoFranco
SergioOlga
FilippoAndrea
Aldo
Franco
20 April 2023 - slide 88Linguaggio SQL
Notazione posizionale, 2select padre, figliofrom paternitaunionselect figlio, madrefrom maternita
select padre, figliofrom paternitaunionselect madre, figliofrom maternita
20 April 2023 - slide 89Linguaggio SQL
Notazione posizionale, 3
Anche con le ridenominazioni non cambia niente:select padre as genitore, figliofrom paternitaunionselect figlio, madre as genitorefrom maternita
Corretta:select padre as genitore, figliofrom paternitaunionselect madre as genitore, figlio from maternita
20 April 2023 - slide 90Linguaggio SQL
Differenzaselect Nomefrom Impiegatoexceptselect Cognome as Nomefrom Impiegato
vedremo che si può esprimere con select nidificate
20 April 2023 - slide 91Linguaggio SQL
Intersezioneselect Nomefrom Impiegatointersectselect Cognome as Nomefrom Impiegato
equivale a
select I.Nomefrom Impiegato I, Impiegato Jwhere I.Nome = J.Cognome
20 April 2023 - slide 92Linguaggio SQL
Interrogazioni nidificate
le condizioni atomiche permettono anche il confronto fra un attributo (o più, vedremo poi) e il risultato di una
sottointerrogazione quantificazioni esistenziali
20 April 2023 - slide 93Linguaggio SQL
nome e reddito del padre di Franco
select Nome, Redditofrom Persone, Paternitawhere Nome = Padre and Figlio = 'Franco'
select Nome, Redditofrom Personewhere Nome = ( select Padre
from Paternita where Figlio = 'Franco')
20 April 2023 - slide 94Linguaggio SQL
Interrogazioni nidificate, commentiLa forma nidificata è “meno dichiarativa”, ma talvolta più leggibile (richiede meno variabili)La forma piana e quella nidificata possono essere combinateLe sottointerrogazioni non possono contenere operatori insiemistici (“l’unione si fa solo al livello esterno”); la limitazione non è significativa
20 April 2023 - slide 95Linguaggio SQL
Nome e reddito dei padri di persone che guadagnano più di 20 milioni
select distinct P.Nome, P.Redditofrom Persone P, Paternita, Persone Fwhere P.Nome = Padre and Figlio = F.Nome
and F.Reddito > 20
select Nome, Redditofrom Personewhere Nome in (select Padre
from Paternitawhere Figlio = any (select Nome
from Personewhere Reddito > 20))
20 April 2023 - slide 96Linguaggio SQL
Nome e reddito dei padri di persone che guadagnano più di 20 milioni
select distinct P.Nome, P.Redditofrom Persone P, Paternita, Persone Fwhere P.Nome = Padre and Figlio = F.Nome
and F.Reddito > 20
select Nome, Redditofrom Personewhere Nome in (select Padre
from Paternita, Persone where Figlio = Nomeand Reddito > 20)
20 April 2023 - slide 97Linguaggio SQL
Interrogazioni nidificate, commenti, 2
La prima versione di SQL prevedeva solo la forma nidificata (o strutturata), con una sola relazione in ogni clausola FROM. Insoddisfacente:
la dichiaratività è limitata non si possono includere nella target list attributi di relazioni nei
blocchi interni
20 April 2023 - slide 100Linguaggio SQL
Quantificazione esistenziale Ulteriore tipo di condizione
EXISTS ( Sottoespressione )
20 April 2023 - slide 101Linguaggio SQL
Le persone che hanno almeno un figlio
select *from Personewhere exists ( select *
from Paternitawhere Padre = Nome) or
exists ( select *from Maternitawhere Madre = Nome)
20 April 2023 - slide 102Linguaggio SQL
I padri i cui figli guadagnano tutti più di venti milioni
select distinct Padrefrom Paternita Zwhere not exists (
select *from Paternita W, Personewhere W.Padre = Z.Padre
and W.Figlio = Nome and Reddito <= 20)
20 April 2023 - slide 103Linguaggio SQL
Semantica delle espressioni “correlate”
L’interrogazione interna viene eseguita una volta per ciascuna ennupla dell’interrogazione esterna
20 April 2023 - slide 108Linguaggio SQL
Operazioni di aggiornamento
operazioni di inserimento: insert eliminazione: delete modifica: update
di una o più ennuple di una relazionesulla base di una condizione che può coinvolgere anche altre relazioni
20 April 2023 - slide 109Linguaggio SQL
Inserimento
INSERT INTO Tabella [ ( Attributi ) ] VALUES( Valori )
oppure
INSERT INTO Tabella [ ( Attributi )] SELECT ...
20 April 2023 - slide 110Linguaggio SQL
INSERT INTO Persone VALUES ('Mario',25,52)
INSERT INTO Persone(Nome, Eta, Reddito) VALUES('Pino',25,52)
INSERT INTO Persone(Nome, Reddito) VALUES('Lino',55)
INSERT INTO Persone ( Nome )SELECT PadreFROM PaternitaWHERE Padre NOT IN (SELECT Nome FROM Persone)
20 April 2023 - slide 111Linguaggio SQL
Inserimento , commentil’ordinamento degli attributi (se presente) e dei valori è significativole due liste debbono avere lo stesso numero di elementise la lista di attributi è omessa, si fa riferimento a tutti gli attributi della relazione, secondo l’ordine con cui sono stati definitise la lista di attributi non contiene tutti gli attributi della relazione, per gli altri viene inserito un valore nullo (che deve essere permesso) o un valore di default
20 April 2023 - slide 112Linguaggio SQL
Eliminazione di ennupleDELETE FROM Tabella
[ WHERE Condizione ]
20 April 2023 - slide 113Linguaggio SQL
DELETE FROM PersoneWHERE Eta < 35
DELETE FROM PaternitaWHERE Figlio NOT in ( SELECT Nome FROM Persone)
DELETE FROM Paternita
20 April 2023 - slide 114Linguaggio SQL
Eliminazione, commentielimina le ennuple che soddisfano la condizionepuò causare (se i vincoli di integrità referenziale sono definiti con politiche di reazione cascade) eliminiazioni da altre relazioniricordare: se la where viene omessa, si intende where true
20 April 2023 - slide 115Linguaggio SQL
Modifica di ennuple
UPDATE NomeTabellaSET Attributo = < Espressione |
SELECT … | NULL | DEFAULT >
[ WHERE Condizione ]
20 April 2023 - slide 116Linguaggio SQL
UPDATE Persone SET Reddito = 45WHERE Nome = 'Piero'
UPDATE Persone SET Reddito = Reddito * 1.1WHERE Eta < 30
20 April 2023 - slide 117Linguaggio SQL
Vincoli di integrità generici: checkSpecifica di vincoli di ennupla (e anche vincoli più complessi)check ( Condizione )
20 April 2023 - slide 118Linguaggio SQL
Check, esempiocreate table Impiegato(Matricola character(6),Cognome character(20),Nome character(20),Sesso character not null check (sesso in (‘M’,‘F’))Stipendio integer,Superiore character(6), check (Stipendio <= (select Stipendio from Impiegato J where Superiore = J.Matricola) )
20 April 2023 - slide 119Linguaggio SQL
Vincoli di integrità generici: asserzioniSpecifica vincoli a livello di schema
create assertion NomeAss check ( Condizione )
create assertion AlmenoUnImpiegato check (1 <= ( select count(*) from Impiegato ))
20 April 2023 - slide 120Linguaggio SQL
Vistecreate view NomeVista [ ( ListaAttributi ) ] as SelectSQL[ with [ local | cascaded ] check option ]
create view ImpiegatiAmmin (Matricola, Nome, Cognome, Stipendio) as
select Matricola, Nome, Cognome, Stipendiofrom Impiegatowhere Dipart = 'Amministrazione' and Stipendio > 10
20 April 2023 - slide 121Linguaggio SQL
Interrogazioni sulle vistePossono fare riferimento alle viste come se fossero relazioni di base
select * from ImpiegatiAmmin
equivale a (e viene eseguita come)
select Nome, Cognome, Stipendiofrom Impiegatowhere Dipart = 'Amministrazione' and Stipendio > 10
20 April 2023 - slide 122Linguaggio SQL
Aggiornamenti sulle viste
Ammessi (di solito) solo su viste definite su una sola relazioneAlcune verifiche possono essere imposte
20 April 2023 - slide 123Linguaggio SQL
create view ImpiegatiAmminPoveri asselect *from ImpiegatiAmminwhere Stipendio < 50with check option
check option permette modifiche, ma solo a condizione che la ennupla continui ad appartenere alla vista (non posso modificare lo stipendio portandolo a 60)
20 April 2023 - slide 124Linguaggio SQL
Un’interrogazione non standardLa nidificazione nella having non è ammessa
select Dipartfrom Impiegatogroup by Diparthaving sum(Stipendio) >= all (select sum(Stipendio) from Impiegato group by Dipart)
20 April 2023 - slide 125Linguaggio SQL
Soluzione con le vistecreate view BudgetStipendi(Dip,TotaleStipendi) as
select Dipart, sum(Stipendio)from Impiegatogroup by Dipart
select Dipfrom BudgetStipendiwhere TotaleStipendi =(select max(TotaleStipendi) from BudgetStipendi)
20 April 2023 - slide 126Linguaggio SQL
Ancora sulle visteInterrogazione scorretta
select avg(count(distinct Ufficio))from Impiegatogroup by Dipart
Con una vistacreate view DipartUffici(NomeDip,NroUffici) as
select Dipart, count(distinct Ufficio)from Impiegatogroup by Dipart;
select avg(NroUffici)from DipartUffici
20 April 2023 - slide 129Linguaggio SQL
Funzioni scalariFunzioni a livello di ennupla che restituiscono singoli valoriTemporali current_date, extract(year from …)
Manipolazione stringhe char_length, lower
Conversione cast
Condizionali …
20 April 2023 - slide 130Linguaggio SQL
Funzioni condizionaliCase, coalesce, nullif
select Nome, Cognome, coalesce(Dipart,'Ignoto')from Impiegato
select Targa, case Tipo
when 'Auto' then 2.58 * KWatt when 'Moto' then (22.00 + 1.00 *
KWatt) else null end as Tassa
from Veicolowhere Anno > 1975
20 April 2023 - slide 131Linguaggio SQL
Controllo dell'accesso
In SQL è possibile specificare chi (utente) e come (lettura, scrittura, …) può utilizzare la base di dati (o parte di essa)Oggetto dei privilegi (diritti di accesso) sono di solito le tabelle, ma anche altri tipi di risorse, quali singoli attributi, viste o dominiUn utente predefinito _system (amministratore della base di dati) ha tutti i privilegiIl creatore di una risorsa ha tutti i privilegi su di essa
20 April 2023 - slide 132Linguaggio SQL
PrivilegiUn privilegio è caratterizzato da:
la risorsa cui si riferisce l'utente che concede il privilegio l'utente che riceve il privilegio l'azione che viene permessa la trasmissibilità del privilegio
20 April 2023 - slide 133Linguaggio SQL
Tipi di privilegi offerti da SQLinsert: permette di inserire nuovi oggetti (ennuple)update: permette di modificare il contenutodelete: permette di eliminare oggetti select: permette di leggere la risorsa references: permette la definizione di vincoli di integrità referenziale verso la risorsa (può limitare la possibilità di modificare la risorsa)usage: permette l'utilizzo in una definizione (per esempio, di un dominio)
20 April 2023 - slide 134Linguaggio SQL
grant e revokeConcessione di privilegi:
grant < Privileges | all privileges > on Resource to Users [ with grant option ]
grant option specifica se il privilegio può essere trasmesso ad altri utenti
grant select on Department to StefanoRevoca di privilegi
revoke Privileges on Resource from Users [ restrict | cascade ]
20 April 2023 - slide 136Linguaggio SQL
Autorizzazioni, commenti
Come autorizzare un utente a vedere solo alcune ennuple di una relazione?
Attraverso una vista: Definiamo la vista con una condizione di selezione Attribuiamo le autorizzazioni sulla vista, anziché sulla relazione di base
20 April 2023 - slide 138Linguaggio SQL
Transazione
Insieme di operazioni da considerare indivisibile ("atomico"), corretto anche in presenza di concorrenza e con effetti definitivi Proprietà ("acide"):
Atomicità Consistenza Isolamento Durabilità (persistenza)
20 April 2023 - slide 139Linguaggio SQL
Le transazioni sono … atomiche
La sequenza di operazioni sulla base di dati viene eseguita per intero o per niente:
trasferimento di fondi da un conto A ad un conto B: o si fanno il prelevamento da A e il versamento su B o nessuno dei due
20 April 2023 - slide 140Linguaggio SQL
Le transazioni sono … consistenti
Al termine dell'esecuzione di una transazione, i vincoli di integrità debbono essere soddisfatti"Durante" l'esecuzione ci possono essere violazioni, ma se restano alla fine allora la transazione deve essere annullata per intero ("abortita")
20 April 2023 - slide 141Linguaggio SQL
Le transazioni sono … isolate
L'effetto di transazioni concorrenti deve essere coerente (ad esempio "equivalente" all'esecuzione separata)
se due assegni emessi sullo stesso conto corrente vengono incassati contemporaneamente si deve evitare di trascurarne uno
20 April 2023 - slide 142Linguaggio SQL
I risultati delle transazioni sono durevoli
La conclusione positiva di una transazione corrisponde ad un impegno (in inglese commit) a mantenere traccia del risultato in modo definitivo, anche in presenza di guasti e di esecuzione concorrente
20 April 2023 - slide 143Linguaggio SQL
Transazioni in SQLIstruzioni fondamentali
begin transaction: specifica l'inizio della transazione (le operazioni non vengono eseguite sulla base di dati)
commit work: le operazioni specificate a partire dal begin transaction vengono eseguite
rollback work: si rinuncia all'esecuzione delle operazioni specificate dopo l'ultimo begin transaction
20 April 2023 - slide 144Linguaggio SQL
Una transazione in SQLbegin transaction;update ContoCorrente
set Saldo = Saldo – 10where NumeroConto = 12345 ;
update ContoCorrenteset Saldo = Saldo + 10where NumeroConto = 55555 ;
commit work;
20 April 2023 - slide 145Linguaggio SQL
TransazioniFine della transazione
istruzioni COMMIT e ROLLBACK (ABORT)(standard SQL-92)
Esito della transazione esecuzione come unità indivisibile COMMIT: rende permanenti le operazioni errore: operazioni annullate dal sistema ROLLBACK: annulla esplicitamente le operazioni
Tecnologia DBMS >> Concetti Avanzati >> Transazioni
20 April 2023 - slide 146Linguaggio SQL
Transazioni: La Base di Dati dei VideoTecnologia DBMS >> Concetti Avanzati >> Transazioni
CREATE TABLE Videoc (
cod integer PRIMARY KEY,
titolo varchar(50) NOT NULL,
regista varchar(20),
quantita integer DEFAULT 1,
prezzo numeric(4,2)
);
CREATE TABLE Noleggi (
video integer NOT NULL REFERENCES Videoc(cod),
tessera char(4) NOT NULL REFERENCES Tessere(cod),
data date NOT NULL,
PRIMARY KEY
(video, tessera, data)
);
CREATE TABLE Tessere (
cod char(4) PRIMARY KEY,
nomeCliente varchar(50),
indirizzo varchar(50),
totalenoleggi integer DEFAULT 0
);
BEGIN TRANSACTION;
INSERT INTO Noleggi VALUES
(110, ‘pp02’, ‘2002-04-15’);
UPDATE Videoc SET quant.=quant.-1
WHERE cod=110;
UPDATE Tessere SET totn.=totn.+1
WHERE cod=‘pp02’;
COMMIT;
Esempio: noleggio di una videocassetta
20 April 2023 - slide 147Linguaggio SQL
Gestione delle Transazioni in un DBMS
Due moduli fondamentaliGestore della concorrenza
garantisce isolamento e consistenza implementa tecniche più sofisticate di sincr.
Gestore dell’affidabilità garantisce atomicità e durevolezza utilizza un file di registrazioni (“log”) per consentire il
recupero in caso di guasti
Tecnologia DBMS >> Concetti Avanzati >> Transazioni
20 April 2023 - slide 148Linguaggio SQL
Gestione della ConcorrenzaAssume atomicità e durevolezza
fornite dal gestore dell’affidabilità >>
Due obiettivi fondamentali garantire la consistenza della base di dati
(partendo da uno stato consistente, la transazione genera uno stato consistente)
garantire l’isolamento delle transazioni(le transazioni devono essere eseguite come se fossero isolate)
Tecnologia DBMS >> Concetti Avanzati >> Gestione della Concorrenza
20 April 2023 - slide 149Linguaggio SQL
ConsistenzaImpone i vincoli di integrità
definiti nel DDL (più eventuali “trigger”)
Vincoli di riferimento la verifica può essere immediata o differita
Istruzione SET CONSTRAINTS SET CONSTRAINTS ALL DEFERRED;
Vincoli differibili (“deferrable”) i vincoli vengono verificati solo al COMMIT
Tecnologia DBMS >> Concetti Avanzati >> Gestione della Concorrenza
20 April 2023 - slide 150Linguaggio SQL
Consistenza
Esempio: in Noleggi video integer NOT NULL
REFERENCES Videoc(cod) DEFERRABLE;
Tecnologia DBMS >> Concetti Avanzati >> Gestione della Concorrenza
BEGIN TRANSACTION;
SET CONSTRAINTS ALL DEFERRED;
INSERT INTO Noleggi VALUES
(200, ‘pp02’, ‘2002-04-15’);
INSERT INTO Videoc VALUES
(200, ‘Clerks’, ...);
UPDATE Videoc SET
quantita=quantita-1
WHERE cod=200;
COMMIT;
Attenzione: parte
dell’integrità è a
carico del
programmatore (in questo caso non
viene aggiornato
il totalenoleggi della
tessera)
20 April 2023 - slide 152Linguaggio SQL
Gestione dell’AffidabilitàDue obiettivi fondamentali
garantire l’atomicità delle transazioni garantire la durevolezza degli effetti, anche in caso di guasti
(recupero della base di dati)
Idee di base registrare tutte le azioni eseguite in un file di registro (“log”) mantenere copie dei dati e del log (“mirror”) strettamente legato alla gestione del buffer
Tecnologia DBMS >> Concetti Avanzati >> Gestione dell’Affidabilità
20 April 2023 - slide 153Linguaggio SQL
Gestione dell’Affidabilità
File di registro (“log”) si registrano tutte le istruzioni di aggiornamento tutte le istruzioni di start transaction tutte le istruzioni commit tutte le istruzioni rollback
Formato dei record del log ciascun record del log registra la modifica di un
record della base di dati da parte di una transazione
<id trans, id record, vecchio val, nuovo val.>
Tecnologia DBMS >> Concetti Avanzati >> Gestione dell’Affidabilità
20 April 2023 - slide 154Linguaggio SQL
Gestione dell’Affidabilità
Protocollo di scrittura anticipata “Write Ahead Logging” (WAL)
Idea le informazioni vengono scritte secondo un ordine
che garantisce la ripristinabilità in caso di guasti i record del log sono scritti prima dei record della
base di dati (garantisce l’atomicità) i record del log di una transazione sono scritti tutti
prima di effettuare il commit (garantisce la durevolezza)
Tecnologia DBMS >> Concetti Avanzati >> Gestione dell’Affidabilità
20 April 2023 - slide 155Linguaggio SQL
Gestione dell’Affidabilità
Attenzione in ogni istante parte delle pagine del disco sono
nel buffer in memoria centrale se sono state modificate, in caso di guasto si
perdono le modifiche
Punto di controllo (“checkpoint”) “fotografia” stabile della situazione della base di
dati in un certo istante informazioni sulle transazioni attive in quel
momento scrittura su disco delle pagine relative del buffer
Tecnologia DBMS >> Concetti Avanzati >> Gestione dell’Affidabilità
20 April 2023 - slide 160Linguaggio SQL
Architettura di un DBMSTecnologia DBMS >> Concetti Avanzati >> Architettura di un DBMS
Gestione del discoGestione del disco
DBDB
20 April 2023 - slide 161Linguaggio SQL
Il Transaction Log
Il transaction log registra il dettaglio di tutte le transazioni
Qualsiasi cambiamento fatto sul DB
Come fare gli undo dei cambiamenti
Quando e come la transazione è completata
Il log è memorizzato su disco, non in memoria
Se il sistema va in crash, è preservato
Write ahead log rule La scrittura sul log viene
fatta PRIMA del COMMIT
20 April 2023 - slide 162Linguaggio SQL
System FailuresUn system failure significa che tutte le transazioni sono coinvolte
Software crashes Power failures
I dischi fisici NON sono coinvolti e danneggiati
In diversi momenti il DBMS fa dei checkpoint
Tutte le transazioni committed sono scritte sul disco
Vengono registrate su disco tutte le transazioni in esecuzione
20 April 2023 - slide 163Linguaggio SQL
Tipi di Transazioni
Last Checkpoint System Failure
T1
T2
T3
T4
T5
20 April 2023 - slide 164Linguaggio SQL
System RecoveryTutte le transazioni che erano in esecuzione al momento del failure devono essere cancellate e rifatteTutte le transazioni committed dopo l’ultimo checkpoint devono essere ripetute
Transazione del tipo T1 non necessita recoveryTransazione del tipo T3 o T5 necessita di undo e restart Transazione del tipo T2 o T4 necessita di redo
20 April 2023 - slide 165Linguaggio SQL
Transaction RecoveryUNDO e REDO: lista delle transazioni
UNDO = tutte le transazioni running all’ ultimo checkpointREDO = empty
Per ciascuna entry nel file di log, a fare inizio dall’ultimo checkpointIf a BEGIN TRANSACTION entry is found for T
Add T to UNDOIf a COMMIT entry is found for T
Move T from UNDO to REDO
20 April 2023 - slide 166Linguaggio SQL
Transaction Recovery
T1
T2
T3
T4
T5
Checkpoint Failure
UNDO: T2, T3
REDO: Last Checkpoint
Active transactions: T2, T3
20 April 2023 - slide 167Linguaggio SQL
Transaction Recovery
T1
T2
T3
T4
T5
Checkpoint Failure
UNDO: T2, T3, T4
REDO: T4 Begins
Add T4 to UNDO
20 April 2023 - slide 168Linguaggio SQL
Transaction Recovery
T1
T2
T3
T4
T5
Checkpoint Failure
UNDO: T2, T3, T4, T5
REDO: T5 begins
Add T5 to UNDO
20 April 2023 - slide 169Linguaggio SQL
Transaction Recovery
T1
T2
T3
T4
T5
Checkpoint Failure
UNDO: T3, T4, T5
REDO: T2 T2 Commits
Move T2 to REDO
20 April 2023 - slide 170Linguaggio SQL
Transaction Recovery
T1
T2
T3
T4
T5
Checkpoint Failure
UNDO: T3, T5
REDO: T2, T4
T4 Commits
Move T4 to REDO
20 April 2023 - slide 171Linguaggio SQL
Media FailuresSystem failures non sono preoccupanti
Informazioni dopo l’ultimo checkpoint sono interessate
Si recuperano dal transaction log
Media failures (disk crashes etc) sono più serie
Dati su disco sono danneggiati
Il transaction log stesso può essere danneggiato
20 April 2023 - slide 172Linguaggio SQL
BackupsBackups sono necessari !! Per proteggersi da media failure
Il transaction log e l’intero contenuto del database è scritto su uno storage secondario (tape)
Time consuming, e spesso richiede down time
Frequenza di backups Alta per non perdere
informazioni Non troppo frequente per
non causare rallentamenti operativi
Ogni giorno (notte) di solito
Backup storage
20 April 2023 - slide 173Linguaggio SQL
Recovery from Media FailureRestore del database dall’ultimo backupUsare il transaction log per fare il redo dei cambiamenti dopo ultimo back up
Se il transaction log è danneggiato non si può fare lo step 2
Memorizzare il log su un device separato del database
Rischio di perderli entrambi è ridotto
20 April 2023 - slide 174Linguaggio SQL
Concorrenza
Grossi databases sono usati da tante persone
Molte transazioni aperte sul database
Devono girare tutte insieme in modo indipendente
Si deve garantire isolamento
Se non ci fosse concorrenza, le transazioni sarebbero sequenziali
Un coda di transazioni Lunghe transazioni
rallenterebbero gli altri
20 April 2023 - slide 175Linguaggio SQL
Transactions and Recovery
Problemi di concorrenzaPer gestire transazioni concorrenti si intercalano le operazioniCiascuna transazione va in time sharing
Questo comporta diversi problemi
Lost updates Uncommitted updates Incorrect analysis
Tutte dovute alla rottura dell’isolamento
20 April 2023 - slide 176Linguaggio SQL
Lost UpdateT1 eT2 leggono X, lo modificano entrambe, entrambe lo scrivono
L’effetto finale di T1 e T2 dovrebbe essere nessun cambiamento di X
Solo i cambiamenti di T2 sono visibili, quindi il valore finale di X è aumentato di 5
T1 T2
Read(X)
X = X - 5
Read(X)
X = X + 5
Write(X)
Write(X)
COMMIT
COMMIT
20 April 2023 - slide 177Linguaggio SQL
Uncommitted UpdateT2 vede i cambiamenti di X fatti da T1, ma T1 è rolled back
Il cambio fatto da T1 è un undone dal rollback
Ma nel finale non è così: il cambio di T2 viene anche eliminato
T1 T2
Read(X)
X = X - 5
Write(X)
Read(X)
X = X + 5
Write(X)
ROLLBACK
COMMIT
20 April 2023 - slide 178Linguaggio SQL
Inconsistent analysisT1 non cambia la somma di X ed Y, ma T2 vede il cambiamento
T1 consiste di due parti – prendi 5 da X e poi aggiungi 5 ad Y
T2 vede l’effetto del primo, ma non del secondo
T1 T2
Read(X)
X = X - 5
Write(X)
Read(X)
Read(Y)
Sum = X+Y
Read(Y)
Y = Y + 5
Write(Y)
SQL è STANDARD
Strategico per IBM, Microsoft, OracleOgni DBMS vendor ha il suo SQL based softwareDomina in ogni mercato, dai PC ai OLTP OLAPEmerge come standard dell’office e PC LAN