• Non ci sono risultati.

Corso di Basi di Dati

N/A
N/A
Protected

Academic year: 2021

Condividi "Corso di Basi di Dati"

Copied!
26
0
0

Testo completo

(1)

Corso di Basi di Dati

Il Linguaggio SQL

Home page del corso:

http://www.cs.unibo.it/~difelice/dbsi/

(2)

Il Linguaggio SQL

SQL (Structured Query Language) e’ il linguaggio di riferimento per le basi di dati relazionali.

Diverse versioni del linguaggio:

Ø  SQL-86 à Costrutti base

Ø  SQL-89 à Integrita’ referenziale

Ø  SQL-92 (SQL2) à Modello relazionale, struttura a livelli Ø  SQL:1999 (SQL3) à Modello ad oggetti

Ø  SQL:2003 (SQL3) à Nuove parti: SQL/JRT, SQL/XML

Ø  SQL:2006 (SQL3) à Estensione di SQL/XML

Ø  SQL:2008 (SQL3) à Lievi aggiunte

(3)

Il Linguaggio SQL

Oltre ad i costrutti base di SQL2 visti fin qui, esistono molti costrutti avanzati (i) definiti in SQL3 e/o (ii) dipendenti dallo specifico DBMS . Ø  Procedure (Stored Procedures)

Ø  Trigger

Ø  Permessi

(4)

Il Linguaggio SQL

Stored Procedures à Frammenti di codice SQL, con la possibilità di specificare un nome , dei

parametri in ingresso e dei valori di ritorno .

Procedure ModificaStipendio (MatricolaN:

varchar(20), StipendioNew: smallint) update Impiegati

set Stipendio=StipendioNew where Matricola=MatricolaN

Ogni DBMS offre estensioni procedurali differenti …

(5)

Il Linguaggio SQL

DB TABELLE

APPLICAZIONE ESTERNA SQL

DATI

DB TABELLE

APPLICAZIONE ESTERNA NOME PROCEDURA

+ PARAMETRI

DATI PROCEDURE

MODELLO senza STORED PROCEDURE

MODELLO con

STORED PROCEDURE

Ø  Efficienza

Ø  Maggiore espressività Ø  …

(6)

Il Linguaggio SQL

Esempio: definizione di funzioni in MySQL:

CREATE FUNCTION function_name RETURNS type_return

… List of SQL routine statements

CREATE FUNCTION echo(s CHAR(20)) RETURNS CHAR(50)

RETURN(s)

mysql>> SELECT echo(“Hello”);

(7)

Il Linguaggio SQL

Le estensioni procedurali consentono di:

Ø Aggiungere strutture di controllo al linguaggio SQL (es. cicli, strutture condizionali if then else, etc).

Ø Dichiarare variabili e tipi di dato user-defined.

Ø Definire funzioni avanzate ed ottimizzate , che

sono ritenute “sicure” dal DBMS.

(8)

Il Linguaggio SQL

Ogni DBMS offre una sua estensione procedurale:

Ø PL/SQL à Linguaggio di Oracle Server Ø SQL PL à Linguaggio di IBM DB2

Ø PL/pgSQL à Linguaggio di PostgreSQL

Ø  SQL/PSM à Linguaggio di MySQL/SQL2

(9)

Il Linguaggio SQL

Costrutti procedurali in PostgreSQL:

Ø  Costrutti condizionali

if <Condizione> then … else … endif

IF user_id <> 0 THEN UPDATE USERS

SET USERS.email=v_email

WHERE (USERS.user_id = user_id) ENDIF

(10)

Il Linguaggio SQL

Costrutti procedurali in PostgreSQL:

Ø  Costrutti iterativi (while) while (Expression) LOOP

statements END LOOP

WHILE ncycle>0 LOOP UPDATE SALARY

SET SALARY.amount=SALARY.amount -100 ncycle:=ncycle -1;

END LOOP

(11)

Il Linguaggio SQL

Costrutti procedurali in PostgreSQL:

Ø  Costrutti iterativi (for)

For record_or_row IN query LOOP statements

END LOOP

FOR Studente IN SELECT * FROM STUDENTI LOOP UPDATE ESAMI

SET Voto=30

WHERE (Corso=“Basi di Dati”) END LOOP

(12)

Il Linguaggio SQL

Oltre ad i costrutti base di SQL2 visti fin qui, esistono molti costrutti avanzati (i) definiti in SQL3 e/o (ii) dipendenti dallo specifico DBMS . Ø  Procedure (Stored Procedures)

Ø  Trigger

Ø  Permessi

(13)

Il Linguaggio SQL

Nome Codice Quantita

Xbee Radio Shield 123 3

Arduino Uno Shield 5565 2

Arduino Ethernet 14354 1

ORDINE

Vorrei implementare un comportamento del tipo:

Ø  Ogni volta che viene inserito/modificato un nuovo ordine in più di 5 quantità viene inviata una mail al Titolare

dell’azienda ..

(14)

Il Linguaggio SQL

Nome Codice Quantita

Xbee Radio Shield 123 3

Arduino Uno

Shield 5565 2

Arduino Ethernet 14354 1

ORDINE

Vorrei implementare un comportamento del tipo:

Ø  Ogni volta in cui l’utente fa un’ordine, si aggiorna la tabella Magazzino, e nel caso non ci siano più prodotti di quel

tipo, si aggiorni anche la tabella Acquisti …

MAGAZZINO

Codice Quantita

123 0

5565 2 14354 1

ACQUISTO

Codice Q.a Data

123 3 1/2/

2012

(15)

Il Linguaggio SQL

Trigger (o regole attive) à meccanismi di gestione della base di dati basati sul paradigma ECA

(Evento/Condizione/Azione).

Ø  Evento: primitive per la manipolazione dei dati (insert, delete, update)

Ø  Condizione: Predicato booleano

Ø  Azione: sequenza di istruzioni SQL, talvolta

procedure SQL specifiche del DBMS.

(16)

Il Linguaggio SQL

Trigger (o regole attive) à meccanismi di gestione della base di dati basati sul paradigma ECA

(Evento/Condizione/Azione).

A che servono i Trigger?

1. Garantire il soddifacimento di vincoli di integrità

referenziale , e/o specificare meccanismi di reazione

ad hoc in caso di violazione dei vincoli!

(17)

Nome Codice Crediti Basi di dati 6464 12

Programmazione 1213 12 Sistemi Operativi 1455 6

Corso Studente Voto 0121 4324235245 30L 1213 4324235245 25 1213 9854456565 18

CORSI ESAMI

Q. Che accade se un valore nella tabella esterna viene cancellato o viene modificato?

A. Il vincolo di integrità referenziale nella tabella interna potrebbe non essere piu’ valido! Cosa fare?

Il Linguaggio SQL

(18)

Il Linguaggio SQL

Trigger (o regole attive) à meccanismi di gestione della base di dati basati sul paradigma ECA

(Evento/Condizione/Azione).

A che servono i Trigger?

2. Specificare regole aziendali ( business rules),

ossia vincoli generici sullo schema della base di dati

(es. Un impiegato non può avere un aumento di stipendio superiore al 10%, pena annullamento della transazione).

(19)

Il Linguaggio SQL

Create trigger Nome

Modo Evento on Tabella [referencing Referenza]

[for each Livello]

[when (IstruzioneSQL)]

Istruzione/ProceduraSQL

Trigger (o regole attive) à meccanismi di gestione della base di dati basati sul paradigma ECA

(Evento/Condizione/Azione).

SINTASSI SQL3

EVENTO

CONDIZIONE AZIONE

(20)

Il Linguaggio SQL

Ø  Modo à before/after

Ø  Evento à insert/delete/update

Ø  Referencing à qui possono essere inserite variabili globali per aumentare l’espressività del trigger…

Ø  Livello à row (Il trigger agisce a livello di righe) statement (Il trigger agisce globalmente a livello di tabella)

Due modalità di esecuzione: immediata vs differita .

(21)

Il Linguaggio SQL

CREATE TRIGGER CHECKAUMENTO

BEFORE UPDATE OF CONTO ON IMPIEGATO FOR EACH ROW

WHEN (NEW.STIPENDIO > OLD.STIPENDIO * 1.2) SET NEW.STIPENDIO=OLD.STIPENDIO * 1.2

Esempio di Trigger in SQL3

Ø Modo è definito come before.

Ø Evento è definito come update.

Ø  Livello è definito come row.

(22)

Il Linguaggio SQL

Oltre ad i costrutti base di SQL2 visti fin qui, esistono molti costrutti avanzati (i) definiti in SQL3 e/o (ii) dipendenti dallo specifico DBMS . Ø  Procedure (Stored Procedures)

Ø  Trigger

Ø  Permessi

(23)

Il Linguaggio SQL

Di default, ogni risorsa appartiene all’utente che l’ha definita … Su ciascuna risorsa sono definiti dei privilegi ( grant):

Ø  insert/update/delete à tabelle/viste Ø  select à tabelle/viste

Ø  references àtabelle/attributi Ø  usage à domini

SQL2/SQL3 prevede meccanismi di controllo di

accesso alle risorse dello schema del DB.

(24)

Il Linguaggio SQL

Il comando grant consente di assegnare privilegi su una certa risorsa ad utenti specifici.

grant Privilegio on Risorsa/e to Utente/i [with grant option]

L’opzione with grant option consente di

propagare il privilegio ad altri utenti del sistema…

grant select on Impiegati to Marco with grant option grant delete on Impiegati, Salari to Marco, Michele

(25)

Il Linguaggio SQL

Il comando revoke consente di revocare privilegi su una certa risorsa ad utenti specifici.

revoke Privilegio on Risorsa/e from Utente/i [cascade|restrict]

L’opzione cascade agisce ricorsivamente sui

privilegi eventualmente concessi da quell’utente …

revoke select on Impiegati to Marco cascade

revoke delete on Impiegati, Salari to Marco, Michele

(26)

Il Linguaggio SQL

In SQL3 è possibile definire dei ruoli per l’ accesso alle risorse di un database.

Ruolo = Contenitore di privilegi

Ø Insert su Tabella Impiegati

Ø Select su Tabella Retribuzioni Ø Update su Tabella Progetti

ESEMPIO di RUOLO

Ø  Comandi SQL3: create role/set role

Riferimenti

Documenti correlati

CREATE VIEW PICCOLI_FORNITORI AS SELECT CodF, NomeF, NSoci, Sede..

può concludersi con un successo o un insuccesso in caso di successo, il risultato delle operazioni eseguite deve essere memorizzato in modo permanente nella base di dati. in caso

in caso di insuccesso, la base di dati deve ritornare allo stato precedente l’inizio della transazione.. DB M G 11

Il DBMS genera il piano di esecuzione dell’istruzione se è già stato predefinito deve solo

Le operazioni bancarie richiedono di accedere alla base di dati e di modificarne il contenuto.. esecuzione di

il parametro può essere sia letto, sia scritto all’interno della stored procedure. Per i parametri di tipo OUT e IN OUT il valore finale è assegnato solo quando la procedura

Alla creazione di una risorsa, il sistema concede tutti i privilegi su tale risorsa all’utente che ha creato la risorsa. Solo il creatore della risorsa ha il privilegio di

Generalità : (nome, cognome, data nascita, residenza) Generalità ={ (Gennaro, Esposito, 1/1/70, Napoli),.. (Ambrogio, Rossi, 1/2/73, Milano), (Romolo, Romano,