Top Banner
Corso di Basi di Dati Il Linguaggio SQL Home page del corso: http://www.cs.unibo.it/~difelice/dbsi/
26

Corso di Basi di Dati - cs.unibo.itdifelice/dbsi/2015/slides/pdf/3_4.pdf · Nome Codice Quantita Xbee Radio Shield 123 3 Arduino Uno Shield 5565 2 Arduino Ethernet 14354 1 ORDINE

Feb 18, 2019

Download

Documents

truongque
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Corso di Basi di Dati - cs.unibo.itdifelice/dbsi/2015/slides/pdf/3_4.pdf · Nome Codice Quantita Xbee Radio Shield 123 3 Arduino Uno Shield 5565 2 Arduino Ethernet 14354 1 ORDINE

Corso di Basi di Dati

!

Il Linguaggio SQL

!Home page del corso:

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

Page 2: Corso di Basi di Dati - cs.unibo.itdifelice/dbsi/2015/slides/pdf/3_4.pdf · Nome Codice Quantita Xbee Radio Shield 123 3 Arduino Uno Shield 5565 2 Arduino Ethernet 14354 1 ORDINE

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

Page 3: Corso di Basi di Dati - cs.unibo.itdifelice/dbsi/2015/slides/pdf/3_4.pdf · Nome Codice Quantita Xbee Radio Shield 123 3 Arduino Uno Shield 5565 2 Arduino Ethernet 14354 1 ORDINE

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

Page 4: Corso di Basi di Dati - cs.unibo.itdifelice/dbsi/2015/slides/pdf/3_4.pdf · Nome Codice Quantita Xbee Radio Shield 123 3 Arduino Uno Shield 5565 2 Arduino Ethernet 14354 1 ORDINE

Il Linguaggio SQL

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

Page 5: Corso di Basi di Dati - cs.unibo.itdifelice/dbsi/2015/slides/pdf/3_4.pdf · Nome Codice Quantita Xbee Radio Shield 123 3 Arduino Uno Shield 5565 2 Arduino Ethernet 14354 1 ORDINE

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à ➢ …

Page 6: Corso di Basi di Dati - cs.unibo.itdifelice/dbsi/2015/slides/pdf/3_4.pdf · Nome Codice Quantita Xbee Radio Shield 123 3 Arduino Uno Shield 5565 2 Arduino Ethernet 14354 1 ORDINE

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”);

Page 7: Corso di Basi di Dati - cs.unibo.itdifelice/dbsi/2015/slides/pdf/3_4.pdf · Nome Codice Quantita Xbee Radio Shield 123 3 Arduino Uno Shield 5565 2 Arduino Ethernet 14354 1 ORDINE

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.

Page 8: Corso di Basi di Dati - cs.unibo.itdifelice/dbsi/2015/slides/pdf/3_4.pdf · Nome Codice Quantita Xbee Radio Shield 123 3 Arduino Uno Shield 5565 2 Arduino Ethernet 14354 1 ORDINE

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 !

➢…

Page 9: Corso di Basi di Dati - cs.unibo.itdifelice/dbsi/2015/slides/pdf/3_4.pdf · Nome Codice Quantita Xbee Radio Shield 123 3 Arduino Uno Shield 5565 2 Arduino Ethernet 14354 1 ORDINE

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)

Page 10: Corso di Basi di Dati - cs.unibo.itdifelice/dbsi/2015/slides/pdf/3_4.pdf · Nome Codice Quantita Xbee Radio Shield 123 3 Arduino Uno Shield 5565 2 Arduino Ethernet 14354 1 ORDINE

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

Page 11: Corso di Basi di Dati - cs.unibo.itdifelice/dbsi/2015/slides/pdf/3_4.pdf · Nome Codice Quantita Xbee Radio Shield 123 3 Arduino Uno Shield 5565 2 Arduino Ethernet 14354 1 ORDINE

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

Page 12: Corso di Basi di Dati - cs.unibo.itdifelice/dbsi/2015/slides/pdf/3_4.pdf · Nome Codice Quantita Xbee Radio Shield 123 3 Arduino Uno Shield 5565 2 Arduino Ethernet 14354 1 ORDINE

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

Page 13: Corso di Basi di Dati - cs.unibo.itdifelice/dbsi/2015/slides/pdf/3_4.pdf · Nome Codice Quantita Xbee Radio Shield 123 3 Arduino Uno Shield 5565 2 Arduino Ethernet 14354 1 ORDINE

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 ..

Page 14: Corso di Basi di Dati - cs.unibo.itdifelice/dbsi/2015/slides/pdf/3_4.pdf · Nome Codice Quantita Xbee Radio Shield 123 3 Arduino Uno Shield 5565 2 Arduino Ethernet 14354 1 ORDINE

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

Page 15: Corso di Basi di Dati - cs.unibo.itdifelice/dbsi/2015/slides/pdf/3_4.pdf · Nome Codice Quantita Xbee Radio Shield 123 3 Arduino Uno Shield 5565 2 Arduino Ethernet 14354 1 ORDINE

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. !

Page 16: Corso di Basi di Dati - cs.unibo.itdifelice/dbsi/2015/slides/pdf/3_4.pdf · Nome Codice Quantita Xbee Radio Shield 123 3 Arduino Uno Shield 5565 2 Arduino Ethernet 14354 1 ORDINE

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!

Page 17: Corso di Basi di Dati - cs.unibo.itdifelice/dbsi/2015/slides/pdf/3_4.pdf · Nome Codice Quantita Xbee Radio Shield 123 3 Arduino Uno Shield 5565 2 Arduino Ethernet 14354 1 ORDINE

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 integrita’ referenziale nella tabella interna potrebbe non essere piu’ valido! Cosa fare?

Il Linguaggio SQL

Page 18: Corso di Basi di Dati - cs.unibo.itdifelice/dbsi/2015/slides/pdf/3_4.pdf · Nome Codice Quantita Xbee Radio Shield 123 3 Arduino Uno Shield 5565 2 Arduino Ethernet 14354 1 ORDINE

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 sulo schema della base di dati !(es. Un impiegato non puo’ avere un aumento di stipendio superiore al 10%, pena annullamento della transazione).

Page 19: Corso di Basi di Dati - cs.unibo.itdifelice/dbsi/2015/slides/pdf/3_4.pdf · Nome Codice Quantita Xbee Radio Shield 123 3 Arduino Uno Shield 5565 2 Arduino Ethernet 14354 1 ORDINE

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

Page 20: Corso di Basi di Dati - cs.unibo.itdifelice/dbsi/2015/slides/pdf/3_4.pdf · Nome Codice Quantita Xbee Radio Shield 123 3 Arduino Uno Shield 5565 2 Arduino Ethernet 14354 1 ORDINE

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 modalita’ di esecuzione: immediata vs differita.

Page 21: Corso di Basi di Dati - cs.unibo.itdifelice/dbsi/2015/slides/pdf/3_4.pdf · Nome Codice Quantita Xbee Radio Shield 123 3 Arduino Uno Shield 5565 2 Arduino Ethernet 14354 1 ORDINE

Il Linguaggio SQL

CREATE  TRIGGER  CHECKAUMENTO  BEFORE  UPDATE  OF  CONTO  ON  IMPIEGATO  FOR  EACH  ROW  WHEN  (NEW.STIPENDIO  >  OLD.STIPENDIO  *  1.2)  SET  NEW.STIPENDIO=OLD.STIPENDIO  *  1.2

Esempio di Trigger in SQL3

➢Modo e’ definito come before. ➢Evento e’ definito come update. ➢Livello e’ definito come row.

Page 22: Corso di Basi di Dati - cs.unibo.itdifelice/dbsi/2015/slides/pdf/3_4.pdf · Nome Codice Quantita Xbee Radio Shield 123 3 Arduino Uno Shield 5565 2 Arduino Ethernet 14354 1 ORDINE

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

Page 23: Corso di Basi di Dati - cs.unibo.itdifelice/dbsi/2015/slides/pdf/3_4.pdf · Nome Codice Quantita Xbee Radio Shield 123 3 Arduino Uno Shield 5565 2 Arduino Ethernet 14354 1 ORDINE

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.

Page 24: Corso di Basi di Dati - cs.unibo.itdifelice/dbsi/2015/slides/pdf/3_4.pdf · Nome Codice Quantita Xbee Radio Shield 123 3 Arduino Uno Shield 5565 2 Arduino Ethernet 14354 1 ORDINE

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

Page 25: Corso di Basi di Dati - cs.unibo.itdifelice/dbsi/2015/slides/pdf/3_4.pdf · Nome Codice Quantita Xbee Radio Shield 123 3 Arduino Uno Shield 5565 2 Arduino Ethernet 14354 1 ORDINE

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  

Page 26: Corso di Basi di Dati - cs.unibo.itdifelice/dbsi/2015/slides/pdf/3_4.pdf · Nome Codice Quantita Xbee Radio Shield 123 3 Arduino Uno Shield 5565 2 Arduino Ethernet 14354 1 ORDINE

Il Linguaggio SQL

In SQL3 e’ 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