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;
vediamo gli aspetti essenziali non i dettagli
Linguaggio SQL
19 December, 2015 - slide 2
La storia di SQL
Dr. 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 1993
1996 specifiche interrogazione OLAP
1999 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
Linguaggio SQL
19 December, 2015 - slide 3
Standard SQL
The following is a short, incomplete history of the SQL
Standards – ISO/IEC 9075
1987 – Initial ISO/IEC Standard
1989 – Referential Integrity
1992 – SQL2


1995 SQL/CLI (ODBC)
1996 SQL/PSM – Procedural Language extensions
1999 – User Defined Types
2003 – SQL/XML
2008 – Expansions and corrections
2011 (or 2012) System Versioned and Application Time
Period Tables
19 December 2015
Linguaggio SQL
Metadata Open Forum
4
19 December, 2015 - slide 4
SQL standard 1 2
Linguaggio SQL
SQL/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
19 December, 2015 - slide 5
SQL 99 standard: carattersitiche
•
SQL 1999 Feature
•
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 nontraditional data type such as nautical
distance.
Triggers
•
•
Linguaggio SQL
Brief Description
The ability to specify the instigation of
an action as a consequence of a state
change in the database
•
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.
•
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
•
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.
•
Recursion
•
The ability to fully model nested
relationships such as hierarchies for
organizations.
•
SQL/MED
•
The routines and facilities in support of
the management of types and classes
of data that exists outside the domain
of
19 December, 2015 - slide 6
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 907514: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
Linguaggio SQL
19 December, 2015 - slide 7
SQL CONTROLLA TUTTE LE FUNZIONI DI
DBMS
Definizione dei dati (struttura e relazioni)
Estrazione dei dati
Manipolazione di dati
Controllo degli accessi (privilegi di accesso)
Condivisione dei dati
SQL Query
Integrità dei dati
DBMS
Data Base
Dati
Linguaggio SQL
19 December, 2015 - slide 8
Il ruolo di SQL (che cosa è)
Linguaggio
Linguaggio
Linguaggio
Linguaggio
Linguaggio
Linguaggio
Linguaggio SQL
di Query interattivo
di programmazione per data base
di amministrazione di data base
per il client/server
per la gestione di data base distribuiti
per la gestione di gateway
19 December, 2015 - slide 9
CARATTERISTICHE E BENEFICI....
Indipendenza dai venditori di HW e SW
Portabilità attraverso varie piattoforme HW
Coperto da standard internazioneli SQL1 ed SQL2 e SQL3
Strategico per IBM – Oracle – Micrsoft - …
Linguaggio per data base relazionali (unico)
Strutturo ad alto livello (English-like)
Linguaggio interattivo
Linguaggio programmatico (Statico - Dinamico - API)
In grado di fornire viste diverse del data base
Linguaggio completo (IF, triggers, ...) con T SQL e PL SQL
Definizione dinamica dei dati (anche quando in uso)
Client / server
Linguaggio SQL
19 December, 2015 - slide 10
SQL è strategico
per molti Hw e Sw
IL MITO DELLA PORTABILITA’
Ovvero ... non e’ vero che si puo fare tutto
Codici di errore non sono standard
I tipi di dati non sone sempre supportati
Le tabelle di sistema non sono uguali
Gli standard definiscono solo il SQL via programma, non
l’interattivo
Definisce solo lo Static Embedded Standard
Alcune differenze semantiche (funzioni, NULL)
Sorting secondo ASCII o EBCDIC (collating sequence e
codici)
Struttura delle tabelle
Linguaggio SQL
19 December, 2015 - slide 12
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

Linguaggio SQL
DECLARE - OPEN - FETCH - CLOSE
19 December, 2015 - slide 15
SQL: Le convenzioni
Sui NOMI
Sui TIPI DI DATI (interi - testo ,...)
Su COSTANTI
Su ESPRESSIONI
Su FUNZIONI
Linguaggio SQL
19 December, 2015 - slide 16
Definizione dei dati in SQL
Istruzione CREATE TABLE:


Linguaggio SQL
definisce uno schema di relazione e ne crea un’istanza vuota
specifica attributi, domini e vincoli
19 December, 2015 - slide 17
CREATE TABLE, esempio
CREATE 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)
)
Linguaggio SQL
19 December, 2015 - slide 18
Domini
Domini elementari (predefiniti)
Domini definiti dall'utente (semplici, ma riutilizzabili)
Domini elementari
Carattere: singoli caratteri o stringhe, anche di
lunghezza variabile
Bit: singoli booleani o stringhe
Numerici, esatti e approssimati
Data, ora, intervalli di tempo
Introdotti in SQL:1999:


Linguaggio SQL
Boolean
BLOB, CLOB (binary/character large object): per grandi immagini e testi
19 December, 2015 - slide 19
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 NULL
CHECK ( value >=18 AND value <= 30 )
Linguaggio SQL
19 December, 2015 - slide 20
Vincoli intrarelazionali
NOT NULL
UNIQUE definisce chiavi
PRIMARY KEY: chiave primaria (una sola, implica NOT
NULL)
CHECK, vedremo più avanti
UNIQUE e PRIMARY KEY
due forme:


Linguaggio SQL
nella definzione di un attributo, se forma da solo la chiave
come elemento separato
19 December, 2015 - slide 21
CREATE TABLE, esempio
CREATE 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)
)
Linguaggio SQL
19 December, 2015 - slide 22
PRIMARY KEY, alternative
Matricola CHAR(6) PRIMARY KEY
Matricola CHAR(6),
…,
PRIMARY KEY (Matricola)
Linguaggio SQL
19 December, 2015 - slide 23
CREATE TABLE, esempio
CREATE 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)
)
Linguaggio SQL
19 December, 2015 - slide 24
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!
Linguaggio SQL
19 December, 2015 - slide 25
Vincoli interrelazionali
CHECK, 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
Linguaggio SQL
19 December, 2015 - slide 26
Infrazioni
Codice
Data
Vigile
Prov
Numero
34321
1/2/95
3987
MI
39548K
53524
4/3/95
3295
TO
E39548
64521
5/4/96
3295
PR
839548
73321
5/2/98
9345
PR
839548
Matricola
Cognome
Nome
3987
Rossi
Luca
3295
Neri
Piero
9345
Neri
Mario
7543
Mori
Gino
Vigili
Linguaggio SQL
19 December, 2015 - slide 27
Infrazioni
Codice
Data
Vigile
Prov
Numero
34321
1/2/95
3987
MI
39548K
53524
4/3/95
3295
TO
E39548
64521
5/4/96
3295
PR
839548
73321
5/2/98
9345
PR
839548
Auto
Linguaggio SQL
Prov
Numero
Cognome
Nome
MI
39548K
Rossi
Mario
TO
E39548
Rossi
Mario
PR
839548
Neri
Luca
19 December, 2015 - slide 28
CREATE TABLE, esempio
CREATE 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)
)
Linguaggio SQL
19 December, 2015 - slide 29
Modifiche degli schemi
ALTER DOMAIN
ALTER TABLE
DROP DOMAIN
DROP TABLE
...
Linguaggio SQL
19 December, 2015 - slide 30
Definzione degli indici
è rilevante dal punto di vista delle prestazioni
ma è a livello fisico e non logico
in passato era importante perché in alcuni sistemi
era l'unico mezzo per definire chiavi
CREATE INDEX
Vedremo dettagli nella progettazione fisica
Linguaggio SQL
19 December, 2015 - slide 31
DDL, in pratica
In molti sistemi si utilizzano strumenti diversi dal
codice SQL per definire lo schema della base di dati
Linguaggio SQL
19 December, 2015 - slide 32
SQL, operazioni sui dati
interrogazione:

SELECT
modifica:

Linguaggio SQL
INSERT, DELETE, UPDATE
19 December, 2015 - slide 33
Istruzione SELECT (versione base)
SELECT ListaAttributi
FROM ListaTabelle
[ WHERE Condizione ]
"target list"
clausola FROM
clausola WHERE
Linguaggio SQL
19 December, 2015 - slide 34
selezione
proiezione
Linguaggio SQL
19 December, 2015 - slide 35
Maternità
Paternità
Linguaggio SQL
Madre
Luisa
Luisa
Anna
Anna
Maria
Maria
Figlio
Maria
Luigi
Olga
Filippo
Andrea
Aldo
Padre
Figlio
Sergio Franco
Olga
Luigi
Luigi
Filippo
Franco Andrea
Franco
Aldo
Persone
Nome
Andrea
Aldo
Maria
Anna
Filippo
Luigi
Franco
Olga
Sergio
Luisa
Età Reddito
27
21
25
15
55
42
50
35
26
30
50
40
60
20
30
41
85
35
75
87
19 December, 2015 - slide 36
Selezione e proiezione
Nome e reddito delle persone con meno di trenta
anni
PROJNome, Reddito(SELEta<30(Persone))
select nome, reddito
from persone
where eta < 30
Linguaggio SQL
19 December, 2015 - slide 37
Persone
Andrea
Nome
Aldo
Filippo
Maria
Anna
Filippo
Luigi
Franco
Olga
Sergio
Luisa
Linguaggio SQL
Reddito
27 21Reddito
21
Età
25 15 15
55 30 30
26
42
50
35
26
30
50
40
60
20
30
41
85
35
75
87
19 December, 2015 - slide 38
SELECT, abbreviazioni
select nome, reddito
from persone
where eta < 30
select p.nome as nome,
p.reddito as reddito
from persone p
where p.eta < 30
Linguaggio SQL
19 December, 2015 - slide 39
Selezione, senza proiezione
Nome, età e reddito delle persone con meno di trenta anni
SELEta<30(Persone)
select *
from persone
where eta < 30
Linguaggio SQL
19 December, 2015 - slide 40
SELECT, abbreviazioni
select *
from persone
where eta < 30
select nome, età, reddito
from persone
where eta < 30
Linguaggio SQL
19 December, 2015 - slide 41
Proiezione, senza selezione
Nome e reddito di tutte le persone
PROJNome, Reddito(Persone)
select nome, reddito
from persone
Linguaggio SQL
19 December, 2015 - slide 42
SELECT, abbreviazioni
R(A,B)
select *
from R
equivale (intuitivamente) a
select X.A as A, X.B as B
from R X
where true
Linguaggio SQL
19 December, 2015 - slide 43
Espressioni nella target list
select Reddito/2 as redditoSemestrale
from Persone
where Nome = 'Luigi'
Linguaggio SQL
19 December, 2015 - slide 44
Condizione complessa
select *
from persone
where reddito > 25
and (eta < 30 or eta > 60)
Linguaggio SQL
19 December, 2015 - slide 45
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%'
Linguaggio SQL
19 December, 2015 - slide 46
Gestione dei valori nulli
Impiegati
Matricola
7309
5998
5998
9553
9553

Cognome
Rossi
Neri
Bruni
Neri
Bruni
Filiale
Milano
Roma
Milano
Milano
Età
32
45
NULL
45
NULL
Gli impiegati la cui età è o
potrebbe essere maggiore di 40
SEL Età > 40 OR Età IS NULL (Impiegati)
Linguaggio SQL
19 December, 2015 - slide 47
Gli impiegati la cui età è o
potrebbe essere maggiore di 40
SEL Età > 40 OR Età IS NULL (Impiegati)
select *
from impiegati
where eta > 40 or eta is null
Linguaggio SQL
19 December, 2015 - slide 48
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)
Linguaggio SQL
19 December, 2015 - slide 49
SQL: esecuzione delle interrogazioni
Le espressioni SQL sono dichiarative e noi ne stiamo
vedendo la semantica
In pratica, i DBMS eseguono le operazioni in modo
efficiente, ad esempio:


Linguaggio SQL
eseguono le selezioni al più presto
se possibile, eseguono join e non prodotti cartesiani
19 December, 2015 - slide 54
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 …)
Linguaggio SQL
19 December, 2015 - slide 55
Proiezione, attenzione
• cognome e filiale di tutti gli impiegati
Matricola
7309
5998
9553
5698
Cognome
Neri
Neri
Rossi
Rossi
Filiale
Napoli
Milano
Roma
Roma
Stipendio
55
64
44
64
PROJ Cognome, Filiale (Impiegati)
Linguaggio SQL
19 December, 2015 - slide 56
select distinct
cognome, filiale
from impiegati
select
cognome, filiale
from impiegati
Cognome
Neri
Neri
Rossi
Rossi
Linguaggio SQL
Filiale
Napoli
Milano
Roma
Roma
Cognome
Neri
Neri
Rossi
Filiale
Napoli
Milano
Roma
19 December, 2015 - slide 57
Maternità
Paternità
Linguaggio SQL
Madre
Luisa
Luisa
Anna
Anna
Maria
Maria
Figlio
Maria
Luigi
Olga
Filippo
Andrea
Aldo
Padre
Figlio
Sergio Franco
Olga
Luigi
Luigi
Filippo
Franco Andrea
Franco
Aldo
Persone
Nome
Andrea
Aldo
Maria
Anna
Filippo
Luigi
Franco
Olga
Sergio
Luisa
Età Reddito
27
21
25
15
55
42
50
35
26
30
50
40
60
20
30
41
85
35
75
87
19 December, 2015 - slide 58
Selezione, proiezione e join
I padri di persone che guadagnano più di venti milioni
PROJPadre(paternita
JOIN Figlio =Nome
SELReddito>20 (persone))
select distinct padre
from persone, paternita
where figlio = nome and reddito > 20
Linguaggio SQL
19 December, 2015 - slide 59
Join naturale
Padre e madre di ogni persona
paternita JOIN maternita
select paternita.figlio,padre, madre
from maternita, paternita
where paternita.figlio = maternita.figlio
Linguaggio SQL
19 December, 2015 - slide 60
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.reddito
from persone p, paternita, persone f
where p.nome = padre and
figlio = f.nome and
f.reddito > p.reddito
Linguaggio SQL
19 December, 2015 - slide 61
SELECT, con ridenominazione del risultato
select figlio, f.reddito as reddito,
p.reddito as redditoPadre
from persone p, paternita, persone f
where p.nome = padre and figlio = f.nome
and .reddito > p.reddito
Linguaggio SQL
19 December, 2015 - slide 62
Join esplicito
Padre e madre di ogni persona
select paternita.figlio,padre, madre
from maternita, paternita
where paternita.figlio = maternita.figlio
select madre, paternita.figlio, padre
from maternita join paternita on
paternita.figlio = maternita.figlio
Linguaggio SQL
19 December, 2015 - slide 63
SELECT con join esplicito, sintassi
SELECT …
FROM Tabella { … JOIN Tabella ON CondDiJoin }, …
[ WHERE AltraCondizione ]
Linguaggio SQL
19 December, 2015 - slide 64

Le persone che guadagnano più dei rispettivi padri; mostrare nome, reddito
e reddito del padre
select f.nome, f.reddito, p.reddito
from persone p, paternita, persone f
where p.nome = padre and
figlio = f.nome and
f.reddito > p.reddito
select f.nome, f.reddito, p.reddito
from persone p join paternita on p.nome = padre
join persone f on figlio = f.nome
where f.reddito > p.reddito
Linguaggio SQL
19 December, 2015 - slide 65
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
Linguaggio SQL
19 December, 2015 - slide 66
Join esterno: "outer join"
Padre e, se nota, madre di ogni persona
select paternita.figlio, padre, madre
from paternita left join maternita
on paternita.figlio = maternita.figlio
select paternita.figlio, padre, madre
from paternita left outer join maternita
on paternita.figlio = maternita.figlio
outer e' opzionale
Linguaggio SQL
19 December, 2015 - slide 67
Outer join
select paternita.figlio, padre, madre
from maternita join paternita
on maternita.figlio = paternita.figlio
select paternita.figlio, padre, madre
from maternita left outer join paternita
on maternita.figlio = paternita.figlio
select paternita.figlio, padre, madre
from maternita full outer join paternita
on maternita.figlio = paternita.figlio
Linguaggio SQL
19 December, 2015 - slide 68
Ordinamento del risultato
Nome e reddito delle persone con meno di trenta anni
in ordine alfabetico
select nome, reddito
from persone
where eta < 30
order by nome
Linguaggio SQL
19 December, 2015 - slide 69
select nome, reddito
from persone
where eta < 30
select nome, reddito
from persone
where eta < 30
order by nome
Persone
Persone
Nome Reddito
Andrea
21
Aldo
15
Filippo
30
Nome Reddito
Aldo
15
Andrea
21
Filippo
30
Linguaggio SQL
19 December, 2015 - slide 70
Operatori aggregati
• Nelle espressioni della target list possiamo avere anche espressioni che
calcolano valori a partire da insiemi di ennuple:


Linguaggio SQL
conteggio, minimo, massimo, media, totale
sintassi base (semplificata):
Funzione ( [ DISTINCT ] * )
Funzione ( [ DISTINCT ] Attributo )
19 December, 2015 - slide 71
Operatori aggregati: COUNT
• Il numero di figli di Franco
select count(*) as NumFigliDiFranco
from Paternita
where Padre = 'Franco'
l’operatore aggregato (count) viene applicato al risultato dell’interrogazione:
select *
from Paternita
where Padre = 'Franco'
Linguaggio SQL
19 December, 2015 - slide 72
Paternità
Padre
Figlio
Sergio Franco
Olga
Luigi
Luigi
Filippo
Franco Andrea
Franco
Aldo
NumFigliDiFranco
2
Linguaggio SQL
19 December, 2015 - slide 73
COUNT e valori nulli
select count(*) from persone
select count(reddito) from persone
select count(distinct reddito) from persone
Persone
Linguaggio SQL
Nome
Andrea
Aldo
Maria
Anna
Età
27
25
55
50
Reddito
21
NULL
21
35
19 December, 2015 - slide 74
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'
Linguaggio SQL
19 December, 2015 - slide 75
Operatori aggregati e valori nulli
select avg(reddito) as redditomedio
from persone
Persone
Linguaggio SQL
Nome
Andrea
Aldo
Maria
Anna
Età
27
25
55
50
Reddito
30
NULL
36
36
19 December, 2015 - slide 76
Operatori aggregati e target list
un’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
Linguaggio SQL
19 December, 2015 - slide 77
Operatori aggregati e raggruppamenti
Le funzioni possono essere applicate a partizioni delle relazioni
Clausola GROUP BY:
GROUP BY listaAttributi
Linguaggio SQL
19 December, 2015 - slide 78
Operatori aggregati e raggruppamenti
Il numero di figli di ciascun padre
select padre, count(*) AS NumFigli
from paternita
group by Padre
paternita
Linguaggio SQL
Padre
Sergio
Luigi
Luigi
Franco
Franco
Figlio
Franco
Olga
Filippo
Andrea
Aldo
Padre
Sergio
Luigi
Franco
NumFigli
1
2
2
19 December, 2015 - slide 79
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
Linguaggio SQL
19 December, 2015 - slide 80
Raggruppamenti e target list
scorretta
select padre, avg(f.reddito), p.reddito
from persone f join paternita on figlio = nome join
persone p on padre =p.nome
group by padre
corretta
select padre, avg(f.reddito), p.reddito
from persone f join paternita on figlio = nome join
persone p on padre =p.nome
group by padre, p.reddito
Linguaggio SQL
19 December, 2015 - slide 81
Condizioni sui gruppi
I 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
Linguaggio SQL
19 December, 2015 - slide 82
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 = nome
where eta < 30
group by padre
having avg(f.reddito) > 25
Linguaggio SQL
19 December, 2015 - slide 83
Sintassi, riassumiamo
SelectSQL ::=
select ListaAttributiOEspressioni
from ListaTabelle
[ where CondizioniSemplici ]
[ group by ListaAttributiDiRaggruppamento ]
[ having CondizioniAggregate ]
[ order by ListaAttributiDiOrdinamento ]
Linguaggio SQL
19 December, 2015 - slide 84
Unione, intersezione e differenza
La 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!
Linguaggio SQL
19 December, 2015 - slide 85
Notazione posizionale!
select padre
from paternita
union
select madre
from maternita
quali nomi per gli attributi del risultato?



Linguaggio SQL
nessuno
quelli del primo operando
…
19 December, 2015 - slide 86
Figlio
Sergio Franco
Olga
Luigi
Luigi
Filippo
Franco Andrea
Franco
Aldo
Luisa
Maria
Luigi
Luisa
Olga
Anna
Anna Filippo
Maria Andrea
Maria
Aldo
Linguaggio SQL
Padre
Figlio
Sergio Franco
Olga
Luigi
Luigi
Filippo
Franco Andrea
Franco
Aldo
Luisa
Maria
Luigi
Luisa
Olga
Anna
Anna Filippo
Maria Andrea
Maria
Aldo
19 December, 2015 - slide 87
Notazione posizionale, 2
select padre, figlio
from paternita
union
select figlio, madre
from maternita
Linguaggio SQL
select padre, figlio
from paternita
union
select madre, figlio
from maternita
19 December, 2015 - slide 88
Notazione posizionale, 3
Anche con le ridenominazioni non cambia niente:
select padre as genitore, figlio
from paternita
union
select figlio, madre as genitore
from maternita
Corretta:
select padre as genitore, figlio
from paternita
union
select madre as genitore, figlio
from maternita
Linguaggio SQL
19 December, 2015 - slide 89
Differenza
select Nome
from Impiegato
except
select Cognome as Nome
from Impiegato
vedremo che si può esprimere con select nidificate
Linguaggio SQL
19 December, 2015 - slide 90
Intersezione
select Nome
from Impiegato
intersect
select Cognome as Nome
from Impiegato

equivale a
select I.Nome
from Impiegato I, Impiegato J
where I.Nome = J.Cognome
Linguaggio SQL
19 December, 2015 - slide 91
Interrogazioni nidificate
le condizioni atomiche permettono anche


Linguaggio SQL
il confronto fra un attributo (o più, vedremo poi) e il risultato di una
sottointerrogazione
quantificazioni esistenziali
19 December, 2015 - slide 92
nome e reddito del padre di Franco
select Nome, Reddito
from Persone, Paternita
where Nome = Padre and Figlio = 'Franco'
select Nome, Reddito
from Persone
where Nome =
(
Linguaggio SQL
select Padre
from Paternita
where Figlio = 'Franco')
19 December, 2015 - slide 93
Interrogazioni nidificate, commenti
La forma nidificata è “meno dichiarativa”, ma
talvolta più leggibile (richiede meno variabili)
La forma piana e quella nidificata possono essere
combinate
Le sottointerrogazioni non possono contenere
operatori insiemistici (“l’unione si fa solo al livello
esterno”); la limitazione non è significativa
Linguaggio SQL
19 December, 2015 - slide 94
Nome e reddito dei padri di persone che guadagnano più di 20 milioni
select distinct P.Nome, P.Reddito
from Persone P, Paternita, Persone F
where P.Nome = Padre and Figlio = F.Nome
and F.Reddito > 20
select Nome, Reddito
from Persone
where Nome in (select Padre
from Paternita
where Figlio = any (select Nome
from Persone
where Reddito > 20))
Linguaggio SQL
19 December, 2015 - slide 95
Nome e reddito dei padri di persone che guadagnano più di 20 milioni
select distinct P.Nome, P.Reddito
from Persone P, Paternita, Persone F
where P.Nome = Padre and Figlio = F.Nome
and F.Reddito > 20
select Nome, Reddito
from Persone
where Nome in (select Padre
from Paternita, Persone
where Figlio = Nome
and Reddito > 20)
Linguaggio SQL
19 December, 2015 - slide 96
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:


Linguaggio SQL
la dichiaratività è limitata
non si possono includere nella target list attributi di relazioni nei blocchi
interni
19 December, 2015 - slide 97
Quantificazione esistenziale

Ulteriore tipo di condizione
 EXISTS ( Sottoespressione )
Linguaggio SQL
19 December, 2015 - slide 100
Le persone che hanno almeno un figlio
select *
from Persone
where exists (
select *
exists ( select *
Linguaggio SQL
from Paternita
where Padre = Nome) or
from Maternita
where Madre = Nome)
19 December, 2015 - slide 101
I padri i cui figli guadagnano tutti più di venti milioni
select distinct Padre
from Paternita Z
where not exists (
select *
from Paternita W, Persone
where W.Padre = Z.Padre
and W.Figlio = Nome
and Reddito <= 20)
Linguaggio SQL
19 December, 2015 - slide 102
Semantica delle espressioni “correlate”
L’interrogazione interna viene eseguita una volta per
ciascuna ennupla dell’interrogazione esterna
Linguaggio SQL
19 December, 2015 - slide 103
Operazioni di aggiornamento
operazioni di



inserimento: insert
eliminazione: delete
modifica: update
di una o più ennuple di una relazione
sulla base di una condizione che può coinvolgere
anche altre relazioni
Linguaggio SQL
19 December, 2015 - slide 108
Inserimento
INSERT INTO Tabella [ ( Attributi ) ]
VALUES( Valori )
oppure
INSERT INTO Tabella [ ( Attributi )]
SELECT ...
Linguaggio SQL
19 December, 2015 - slide 109
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 Padre
FROM Paternita
WHERE Padre NOT IN (SELECT Nome
FROM Persone)
Linguaggio SQL
19 December, 2015 - slide 110
Inserimento , commenti
l’ordinamento degli attributi (se presente) e dei valori è significativo
le due liste debbono avere lo stesso numero di elementi
se la lista di attributi è omessa, si fa riferimento a tutti gli attributi della
relazione, secondo l’ordine con cui sono stati definiti
se 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
Linguaggio SQL
19 December, 2015 - slide 111
Eliminazione di ennuple
DELETE FROM Tabella
[ WHERE Condizione ]
Linguaggio SQL
19 December, 2015 - slide 112
DELETE FROM Persone
WHERE Eta < 35
DELETE FROM Paternita
WHERE Figlio NOT in (
SELECT Nome
FROM Persone)
DELETE FROM Paternita
Linguaggio SQL
19 December, 2015 - slide 113
Eliminazione, commenti
elimina le ennuple che soddisfano la condizione
può causare (se i vincoli di integrità referenziale sono definiti con
politiche di reazione cascade) eliminiazioni da altre relazioni
ricordare: se la where viene omessa, si intende where true
Linguaggio SQL
19 December, 2015 - slide 114
Modifica di ennuple
UPDATE NomeTabella
SET Attributo = < Espressione |
SELECT … |
NULL |
DEFAULT >
[ WHERE Condizione ]
Linguaggio SQL
19 December, 2015 - slide 115
UPDATE Persone SET Reddito = 45
WHERE Nome = 'Piero'
UPDATE Persone
SET Reddito = Reddito * 1.1
WHERE Eta < 30
Linguaggio SQL
19 December, 2015 - slide 116
Vincoli di integrità generici: check
Specifica di vincoli di ennupla (e anche vincoli più complessi)
check ( Condizione )
Linguaggio SQL
19 December, 2015 - slide 117
Check, esempio
create 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)
)
Linguaggio SQL
19 December, 2015 - slide 118
Vincoli di integrità generici: asserzioni
Specifica vincoli a livello di schema
create assertion NomeAss check ( Condizione )
create assertion AlmenoUnImpiegato
check (1 <= (
select count(*)
from Impiegato ))
Linguaggio SQL
19 December, 2015 - slide 119
Viste
create view NomeVista [ ( ListaAttributi ) ] as SelectSQL
[ with [ local | cascaded ] check option ]
create view ImpiegatiAmmin
(Matricola, Nome, Cognome, Stipendio) as
select Matricola, Nome, Cognome, Stipendio
from Impiegato
where Dipart = 'Amministrazione' and
Stipendio > 10
Linguaggio SQL
19 December, 2015 - slide 120
Interrogazioni sulle viste
Possono fare riferimento alle viste come se fossero
relazioni di base
select * from ImpiegatiAmmin
equivale a (e viene eseguita come)
select Nome, Cognome, Stipendio
from Impiegato
where Dipart = 'Amministrazione' and
Stipendio > 10
Linguaggio SQL
19 December, 2015 - slide 121
Aggiornamenti sulle viste
Ammessi (di solito) solo su viste definite su una sola
relazione
Alcune verifiche possono essere imposte
Linguaggio SQL
19 December, 2015 - slide 122
create view ImpiegatiAmminPoveri as
select *
from ImpiegatiAmmin
where Stipendio < 50
with 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)
Linguaggio SQL
19 December, 2015 - slide 123
Un’interrogazione non standard
La nidificazione nella having non è ammessa
select Dipart
from Impiegato
group by Dipart
having sum(Stipendio) >= all
(select sum(Stipendio)
from Impiegato
group by Dipart)
Linguaggio SQL
19 December, 2015 - slide 124
Soluzione con le viste
create view BudgetStipendi(Dip,TotaleStipendi) as
select Dipart, sum(Stipendio)
from Impiegato
group by Dipart
select Dip
from BudgetStipendi
where TotaleStipendi =(select max(TotaleStipendi)
from BudgetStipendi)
Linguaggio SQL
19 December, 2015 - slide 125
Ancora sulle viste
Interrogazione scorretta
select avg(count(distinct Ufficio))
from Impiegato
group by Dipart
Con una vista
create view DipartUffici(NomeDip,NroUffici) as
select Dipart, count(distinct Ufficio)
from Impiegato
group by Dipart;
select avg(NroUffici)
from DipartUffici
Linguaggio SQL
19 December, 2015 - slide 126
Funzioni scalari
Funzioni a livello di ennupla che restituiscono singoli valori
Temporali
 current_date, extract(year from …)
Manipolazione stringhe
 char_length, lower
Conversione
 cast
Condizionali
 …
Linguaggio SQL
19 December, 2015 - slide 129
Funzioni condizionali
Case, 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 Veicolo
where Anno > 1975
Linguaggio SQL
19 December, 2015 - slide 130
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 domini
Un utente predefinito _system (amministratore della base di dati) ha tutti i
privilegi
Il creatore di una risorsa ha tutti i privilegi su di essa
Linguaggio SQL
19 December, 2015 - slide 131
Privilegi
Un privilegio è caratterizzato da:





Linguaggio SQL
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
19 December, 2015 - slide 132
Tipi di privilegi offerti da SQL
insert: permette di inserire nuovi oggetti (ennuple)
update: permette di modificare il contenuto
delete: 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)
Linguaggio SQL
19 December, 2015 - slide 133
grant e revoke
Concessione 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 Stefano
Revoca di privilegi
revoke Privileges on Resource from Users
[ restrict | cascade ]
Linguaggio SQL
19 December, 2015 - slide 134
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
Linguaggio SQL
19 December, 2015 - slide 136
Transazione
Insieme di operazioni da considerare indivisibile
("atomico"), corretto anche in presenza di concorrenza
e con effetti definitivi
Proprietà ("acide"):




Linguaggio SQL
Atomicità
Consistenza
Isolamento
Durabilità (persistenza)
19 December, 2015 - slide 138
Le transazioni sono … atomiche
La sequenza di operazioni sulla base di dati viene
eseguita per intero o per niente:

Linguaggio SQL
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
19 December, 2015 - slide 139
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")
Linguaggio SQL
19 December, 2015 - slide 140
Le transazioni sono … isolate
L'effetto di transazioni concorrenti deve essere
coerente (ad esempio "equivalente" all'esecuzione
separata)

Linguaggio SQL
se due assegni emessi sullo stesso conto corrente vengono incassati
contemporaneamente si deve evitare di trascurarne uno
19 December, 2015 - slide 141
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
Linguaggio SQL
19 December, 2015 - slide 142
Transazioni in SQL
Istruzioni fondamentali



Linguaggio SQL
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
19 December, 2015 - slide 143
Una transazione in SQL
begin transaction;
update ContoCorrente
set Saldo = Saldo – 10
where NumeroConto = 12345 ;
update ContoCorrente
set Saldo = Saldo + 10
where NumeroConto = 55555 ;
commit work;
Linguaggio SQL
19 December, 2015 - slide 144
Tecnologia DBMS >> Concetti Avanzati >> Transazioni
Transazioni
Fine della transazione

istruzioni COMMIT e ROLLBACK (ABORT)
(standard SQL-92)
Esito della transazione




Linguaggio SQL
esecuzione come unità indivisibile
COMMIT: rende permanenti le operazioni
errore: operazioni annullate dal sistema
ROLLBACK: annulla esplicitamente le operazioni
19 December, 2015 - slide 145
Tecnologia DBMS >> Concetti Avanzati >> Transazioni
Transazioni: La Base di Dati dei Video
CREATE TABLE Videoc (
cod integer PRIMARY KEY,
CREATE TABLE Tessere (
titolo varchar(50) NOT NULL,
cod char(4) PRIMARY KEY,
regista varchar(20),
nomeCliente varchar(50),
quantita integer DEFAULT 1,
indirizzo varchar(50),
prezzo numeric(4,2)
totalenoleggi integer DEFAULT 0
);
);
CREATE TABLE Noleggi (
video integer NOT NULL
REFERENCES Videoc(cod),
tessera char(4) NOT NULL
REFERENCES Tessere(cod),
Esempio: noleggio di una videocassetta
BEGIN TRANSACTION;
INSERT INTO Noleggi VALUES
(110, ‘pp02’, ‘2002-04-15’);
UPDATE Videoc SET quant.=quant.-1
data date NOT NULL,
PRIMARY KEY
WHERE cod=110;
UPDATE Tessere SET totn.=totn.+1
(video, tessera, data)
);
Linguaggio SQL
WHERE cod=‘pp02’;
COMMIT;
19 December, 2015 - slide 146
Tecnologia DBMS >> Concetti Avanzati >> Transazioni
Gestione delle Transazioni in un DBMS
Due moduli fondamentali
Gestore della concorrenza


garantisce isolamento e consistenza
implementa tecniche più sofisticate di sincr.
Gestore dell’affidabilità


Linguaggio SQL
garantisce atomicità e durevolezza
utilizza un file di registrazioni (“log”) per consentire il recupero in
caso di guasti
19 December, 2015 - slide 147
Tecnologia DBMS >> Concetti Avanzati >> Gestione della Concorrenza
Gestione della Concorrenza
Assume atomicità e durevolezza

fornite dal gestore dell’affidabilità
>>
Due obiettivi fondamentali


Linguaggio SQL
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)
19 December, 2015 - slide 148
Tecnologia DBMS >> Concetti Avanzati >> Gestione della Concorrenza
Consistenza
Impone 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”)

Linguaggio SQL
i vincoli vengono verificati solo al COMMIT
19 December, 2015 - slide 149
Tecnologia DBMS >> Concetti Avanzati >> Gestione della Concorrenza
Consistenza
Esempio: in Noleggi

video integer NOT NULL
REFERENCES Videoc(cod) DEFERRABLE;
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;
Attenzione: parte
dell’integrità è a
carico del
programmatore
(in questo caso non
viene aggiornato
il totalenoleggi della
tessera)
COMMIT;
Linguaggio SQL
19 December, 2015 - slide 150
Tecnologia DBMS >> Concetti Avanzati >> Gestione dell’Affidabilità
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



Linguaggio SQL
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
19 December, 2015 - slide 152
Tecnologia DBMS >> Concetti Avanzati >> Gestione dell’Affidabilità
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


Linguaggio SQL
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.>
19 December, 2015 - slide 153
Tecnologia DBMS >> Concetti Avanzati >> Gestione dell’Affidabilità
Gestione dell’Affidabilità
Protocollo di scrittura anticipata

“Write Ahead Logging” (WAL)
Idea



Linguaggio SQL
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)
19 December, 2015 - slide 154
Tecnologia DBMS >> Concetti Avanzati >> Gestione dell’Affidabilità
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”)



Linguaggio SQL
“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
19 December, 2015 - slide 155
Tecnologia DBMS >> Concetti Avanzati >> Architettura di un DBMS
Architettura di un DBMS
Gestione dei Metodi di acc.
Gestione del buffer
Affidabilità
Ottimizzazione
Algebra (Operatori)
Concorrenza
Autorizzazioni
Sicurezza e
(TCP/IP)
Connessioni
Esecuzione interrogazioni
Gestione del disco
DB
Linguaggio SQL
19 December, 2015 - slide 160
Il Transaction Log
Il transaction log registra il
dettaglio di tutte le
transazioni



Linguaggio SQL
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
19 December, 2015 - slide 161
System Failures
Un system failure significa
che tutte le transazioni
sono coinvolte



Software crashes
Power failures
I dischi fisici NON sono
coinvolti e danneggiati
Linguaggio SQL
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
19 December, 2015 - slide 162
Tipi di Transazioni
T1
T2
T3
T4
T5
Last Checkpoint
Linguaggio SQL
System Failure
19 December, 2015 - slide 163
System Recovery
Tutte le transazioni che
erano in esecuzione al
momento del failure
devono essere cancellate e
rifatte
Tutte le transazioni
committed dopo l’ultimo
checkpoint devono essere
ripetute
Linguaggio SQL
Transazione del tipo T1 non
necessita recovery
Transazione del tipo T3 o T5
necessita di undo e restart
Transazione del tipo T2 o T4
necessita di redo
19 December, 2015 - slide 164
Transaction Recovery
UNDO e REDO: lista delle transazioni
UNDO = tutte le transazioni running all’ ultimo checkpoint
REDO = empty
Per ciascuna entry nel file di log, a fare inizio dall’ultimo checkpoint
If a BEGIN TRANSACTION entry is found for T
Add T to UNDO
If a COMMIT entry is found for T
Move T from UNDO to REDO
Linguaggio SQL
19 December, 2015 - slide 165
Transaction Recovery
T1
T2
T3
T4
T5
Checkpoint
UNDO: T2, T3
Failure
Last Checkpoint
REDO:
Active transactions: T2, T3
Linguaggio SQL
19 December, 2015 - slide 166
Transaction Recovery
T1
T2
T3
T4
T5
Checkpoint
UNDO: T2, T3, T4
Failure
T4 Begins
REDO:
Add T4 to UNDO
Linguaggio SQL
19 December, 2015 - slide 167
Transaction Recovery
T1
T2
T3
T4
T5
Checkpoint
UNDO: T2, T3, T4, T5
Failure
T5 begins
REDO:
Add T5 to UNDO
Linguaggio SQL
19 December, 2015 - slide 168
Transaction Recovery
T1
T2
T3
T4
T5
Checkpoint
UNDO: T3, T4, T5
Failure
T2 Commits
REDO: T2
Move T2 to REDO
Linguaggio SQL
19 December, 2015 - slide 169
Transaction Recovery
T1
T2
T3
T4
T5
Checkpoint
Failure
UNDO: T3, T5
REDO: T2, T4
T4 Commits
Move T4 to REDO
Linguaggio SQL
19 December, 2015 - slide 170
Media Failures
System failures non sono
preoccupanti


Linguaggio SQL
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
19 December, 2015 - slide 171
Backups
Backups sono necessari !!
Per proteggersi da media
failure


Linguaggio SQL
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
19 December, 2015 - slide 172
Recovery from Media Failure
Restore del database
dall’ultimo backup
Usare 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


Linguaggio SQL
Memorizzare il log su un
device separato del database
Rischio di perderli entrambi è
ridotto
19 December, 2015 - slide 173
Concorrenza
Grossi databases sono usati
da tante persone



Linguaggio SQL
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
19 December, 2015 - slide 174
Problemi di concorrenza
Per gestire transazioni
concorrenti si intercalano le
operazioni
Ciascuna transazione va in
time sharing
Questo comporta diversi
problemi



Lost updates
Uncommitted updates
Incorrect analysis
Tutte dovute alla rottura
dell’isolamento
Transactions and Recovery
Linguaggio SQL
19 December, 2015 - slide 175
Lost Update
T1
T2
Read(X)
T1 eT2 leggono X, lo
modificano entrambe,
entrambe lo scrivono

X = X - 5
Read(X)
X = X + 5
Write(X)

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
Write(X)
COMMIT
COMMIT
Linguaggio SQL
19 December, 2015 - slide 176
Uncommitted Update
T1
T2
Read(X)
T2 vede i cambiamenti di X
fatti da T1, ma T1 è rolled
back

X = X - 5
Write(X)
Read(X)

Il cambio fatto da T1 è un
undone dal rollback
Ma nel finale non è così: il
cambio di T2 viene anche
eliminato
X = X + 5
Write(X)
ROLLBACK
COMMIT
Linguaggio SQL
19 December, 2015 - slide 177
Inconsistent analysis
T1
T2
Read(X)
X = X - 5
T1 non cambia la somma di
X ed Y, ma T2 vede il
cambiamento

Write(X)
Read(X)

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
Read(Y)
Sum = X+Y
Read(Y)
Y = Y + 5
Write(Y)
Linguaggio SQL
19 December, 2015 - slide 178
SQL è STANDARD
Strategico per IBM, Microsoft, Oracle
Ogni DBMS vendor ha il suo SQL based
software
Domina in ogni mercato, dai PC ai OLTP
OLAP
Emerge come standard dell’office e PC LAN
Scarica

13_Sql_ove - Studenti Dipartimento di Ingegneria Industriale e