Fisica e SQL. Ing. Alessandro Pellegrini, PhD

Documenti analoghi
DBMS: MySQL CORSO DI BASI DI DATI 2014/2015

Progettazione di Sistemi Informatici

Serializable Snapshot Isolation (SSI) in PostgreSQL 9.1

Accesso alle Basi di Dati

Progetto in Sql con database

Stored Procedures. Antonella Poggi, Claudio Corona. Dipartimento di informatica e Sistemistica SAPIENZA Università di Roma

Stringhe di caratteri

Schema - Model. Diversi livelli di Data Model

Si consideri la realtà medica descritta dalla base di dati relazionale definita dal seguente schema:

Triggers. Antonella Poggi, Claudio Corona. Dipartimento di informatica e Sistemistica Università di Roma La Sapienza

Si consideri la realtà medica descritta dalla base di dati relazionale definita dal seguente schema:

CREATE VIEW. CREATE VIEW <nome_vista> AS (SELECT <lista_campi> FROM <lista_tabelle> WHERE <condizione>);

A. Ferrari SQL. Structured Query Language

MySQL Procedure, funzioni, trigger e scheduling

SISTEMI INFORMATIVI E TELEMEDICINA INFORMATICA MEDICA. 3. Panoramica su SQL Prof. Mauro Giacomini

Cap. 7 -Trigger e loro uso

Caso di Studio: SITI CONTAMINATI

Transazioni. Transazioni. Stati di una transazione. Transazioni

Introduzione. i trigger rendono reattivo il comportamento del sistema alle sollecitazioni esterne.

SQL. Lezione 1. Docente: Alberto Belussi

Appunti dalle lezioni. Sistemi informativi e basi di dati. Il modello relazionale. SQL come DCL Utilizzo di un DBMS Reale.

Laboratorio di Basi di Dati

Stored Procedure. Antonella Poggi. Dipartimento di informatica e Sistemistica Sapienza Università di Roma

Esercitazione 10 SQL: transazioni

Si consideri la realtà medica descritta dalla base di dati relazionale definita dal seguente schema:

Si consideri la realtà medica descritta dalla base di dati relazionale definita dal seguente schema:

Sistemi informativi e basi di dati. Il modello relazionale. SQL come DCL Utilizzo di un DBMS Reale. Forme normali. Basi di dati direzionali

Transazioni. Antonella Poggi. Dipartimento di informatica e Sistemistica Università di Roma La Sapienza

SQL (STRUCTURED QUERY LANGUAGE)

Si consideri la realtà medica descritta dalla base di dati relazionale definita dal seguente schema:

Si consideri la realtà medica descritta dalla base di dati relazionale definita dal seguente schema:

Corso di. Basi di Dati I. 7. Esercitazioni in SQL: Definizione e manipolazione dei dati

Structured. Language. Basi di Dati. Introduzione. DDL: Data Definition Language. Tipi di dato. Query. Modifica dei Dati

Equivalenza di espressioni. Equivalenze. Equivalenze. Due espressioni sono equivalenti se: Atomizzazione delle selezioni σ F1 F2 (E) σ F1 (σ F2 (E))

Corso di. Basi di Dati I. 7. Esercitazioni in SQL: Definizione e manipolazione dei dati

SQL - Structured Query Language

Tipi numerici esatti Valori interi o con parte decimale di lunghezza prefissata

Structured Query Language

Basi di Dati Attive. Basi di Dati Attive

Soluzione esercitazione 01

SQL non è solo un linguaggio di interrogazione (Query Language), ma. Un linguaggio per la definizione di basi di dati (Data-definition language (DDL))

Corso di Basi di Dati

Basi di dati attive. Paolo Atzeni. Basi di dati attive

Il linguaggio SQL: transazioni

Basi di Dati e Sistemi Informativi. Asserzioni, Viste e Trigger Basi di dati Attive

Data Definition in MySQL

SQL quick reference. piccolo manuale di riferimento dei principali comandi SQL (prof. Claudio Maccherani, Perugia, 2013)

Introduzione a MySQL

SQL. SQL come Data Manipulation Language - Inserimento, cancellazione e aggiornamento di righe

Basi di Dati: Corso di laboratorio

Vincoli, procedure e regole attive in SQL. SQL: vincoli, trigger 1

Controllo di concorrenza. concorrenza 1

SQL. Structured Query Language 1974: SEQUEL by IBM 1981: SQL by IBM : SQL ISO 9075:1992 SQL:1999 SQL:2003

SQL PER LA DEFINIZIONE DI BASI DI DATI

SQL SQL. Definizione dei dati. Domini. Esistono 6 domini elementari:


Corso di. Basi di Dati I. 9. Esercitazioni in SQL: Check, asserzioni, viste

Microsoft SQL Server

Corso di Basi di Dati

Tecnologia delle Basi di Dati

McGraw-Hill. Soluzioni degli esercizi. Tutti i diritti riservati. Capitolo SELECT Neg_Nome FROM Negozi. 2. SELECT Neg_Cod FROM Ordini

DUE GRUPPI DI COMANDI

Caso di Studio: SITI CONTAMINATI

Interpretazione delle query nidificate

SQL: DDL, VI, Aggiornamenti e Viste

LINGUAGGIO SQL. Introduzione

Tali regole vengono attivate in modo automatico al verificarsi di specifici eventi sulla. eseguono azioni sulla base di dati stessa.

SQL. Dott.ssa Elisa Quintarelli

PARTITIONING PARTITIONING. 27/11/08 /home/scotty/enrico/corso web/finale/architettura/partit page 1

Storia. Corso di Basi di Dati Spaziali. Componente DDL. Funzionalità. Esempio. Creazione di schema. Linguaggi: SQL. Storia:

PROGETTAZIONE DI DATABASE Linguaggio SQL

Dichiarazione degli schemi in SQL DDL 1

SQL STRUCTURED QUERY LANGUAGE

Le Basi di Dati Attive

Triggers. Basi dati attive. Trigger. Indipendenza della conoscenza

Il linguaggio SQL. Massimo Paolucci DIST Università di Genova. SQL: Structured Query Language

PRODOTTO CARTESIANO Caso Generale

SQL (STRUCTURED QUERY LANGUAGE)

PROGETTAZIONE DI DATABASE

Lezione del modulo 7 SQL e database del giorno 04/05/2006 tot. ore 3. Lo Standard SQL

Universita di Milano Bicocca Corso di Basi di dati 1 in elearning C. Batini 6. SQL DDL 6.1 Data Description Language - 1

VIEW SQL CREATE VIEW. VIEW (Viste utente) Esempio. Esempio SQL. A. Ferrari 1. Avanzato. Viste utente

Le transazioni. Update CC set saldo = saldo + 25 where ccnum = Update CC set saldo = saldo 25 where ccnum = 26488

A. Veneziani Linguaggio SQL

A.A. 2018/2019. Esercitazione 12. Strutturazione di Istruzioni in Linguaggio SQL. [ Possibili Soluzioni ] FONDAMENTI DI INFORMATICA E PROGRAMMAZIONE

SQL. Laboratorio di Progettazione di Basi di Dati (CdS in Informatica e TPS)

Basi di Dati 1 Prof. L. Tanca e F. A. Schreiber APPELLO DEL 1 OTTOBRE 2015 Tempo: 2h30m

SQL Matteo Magnani, Danilo Montesi Università di Bologna SQL. Linguaggio di interrogazione per basi di dati relazionali

SQL Sintassi Dei Comandi

Corso di. Basi di Dati I. 11. Esercitazioni in SQL: Altri esercizi

1. INTRODUZIONE ALLE BASI DI DATI

Basi di dati attive. Paolo Atzeni Stefano Ceri. Basi di dati attive

Lezione 8. Metadati, Viste e Trigger

2011 Politecnico di Torino 1

Basi di Dati Corso di Laura in Informatica Umanistica

Laboratorio di Basi di Dati

Transcript:

Progettazione Fisica e SQL Ing. Alessandro Pellegrini, PhD pellegrini@diag.uniroma1.it

Creazione Stored Procedure CREATE [OR REPLACE] [DEFINER = { user CURRENT_USER role CURRENT_ROLE }] PROCEDURE sp_name ([proc_parameter[,...]]) [characteristic...] routine_body proc_parameter: [ IN OUT INOUT ] param_name type type: Any valid MariaDB data type characteristic: LANGUAGE SQL [NOT] DETERMINISTIC { CONTAINS SQL NO SQL READS SQL DATA MODIFIES SQL DATA } SQL SECURITY { DEFINER INVOKER } COMMENT 'string' routine_body: Valid SQL procedure statement 2

Indici CREATE [OR REPLACE] [ONLINE OFFLINE] [UNIQUE FULLTEXT SPATIAL] INDEX [IF NOT EXISTS] index_name [index_type] ON tbl_name (index_col_name,...) [WAIT n NOWAIT] [index_option] [algorithm_option lock_option]... index_col_name: col_name [(length)] [ASC DESC] index_type: USING {BTREE HASH RTREE} index_option: KEY_BLOCK_SIZE [=] value index_type WITH PARSER parser_name COMMENT 'string' algorithm_option: ALGORITHM [=] {DEFAULT INPLACE COPY} lock_option: LOCK [=] {DEFAULT NONE SHARED EXCLUSIVE} 3

Select SELECT [ALL DISTINCT DISTINCTROW] [HIGH_PRIORITY] [STRAIGHT_JOIN] [SQL_SMALL_RESULT] [SQL_BIG_RESULT] [SQL_BUFFER_RESULT] [SQL_CACHE SQL_NO_CACHE] [SQL_CALC_FOUND_ROWS] select_expr [, select_expr...] [ FROM table_references [WHERE where_condition] [GROUP BY {col_name expr position} [ASC DESC],... [WITH ROLLUP]] [HAVING where_condition] [ORDER BY {col_name expr position} [ASC DESC],...] [LIMIT {[offset,] row_count row_count OFFSET offset}] [INTO OUTFILE 'file_name' [CHARACTER SET charset_name] [export_options] 4

Le operazioni di Join 5

Livelli di Isolamento READ UNCOMMITTED Gli statement SELECT sono eseguiti in modalità non bloccante, ma è possibile che venga utilizzata una versione precedente di una riga. Pertanto, utilizzando questo livello di isolamento, le letture possono non esere coerenti (dirty read). Questo fenomeno si verifica poiché una transazione può leggere dati da una riga aggiornata da un'altra transazione che non ha ancora eseguito l'operazione di commit. 6

Dirty Reads T1 T2 SELECT age FROM users WHERE id = 1; UPDATE users SET age = 21 WHERE id = 1; SELECT age FROM users WHERE id = 1; ROLLBACK; 7

Livelli di Isolamento READ COMMITTED Il DBMS acqusisce un lock per ogni dato che viene letto o scritto. I lock associati ai dati che sono stati aggiornati in scrittura sono mantenuti fino alla fine della transazione, mentre i lock associati ai dati acceduti in lettura sono rilasciati alla fine della singola lettura. Possono verificarsi anomalie di tipo unrepeatable reads. 8

Unrepeatable Reads T1 T2 SELECT * FROM users WHERE id = 1; UPDATE users SET age = 21 WHERE id = 1; COMMIT; SELECT * FROM users WHERE id = 1; COMMIT; 9

Livelli di Isolamento REPEATABLE READ Con questo livello di isolamento, vengono mantenuti i lock sia dei dati acceduti in lettura sia in scrittura fino alla fine della transazione. Non vengono però gestiti i range lock, pertanto possono verificarsi anomalie di tipo phantom read. Le phantom read sono associate ad inserimenti che avvengono in concorrenza. Nelle versioni più nuove di InnoDB, è il livello di isolamento predefinito. 10

Phantom Reads T1 T2 SELECT * FROM users WHERE age BETWEEN 10 AND 30; INSERT INTO users(id,name,age) VALUES ( 3, 'Bob', 27 ); COMMIT; SELECT * FROM users WHERE age BETWEEN 10 AND 30; COMMIT; 11

Livelli di Isolamento SERIALIZABLE Tutti i lock vengono mantenuti fino alla fine della transazione e ogni volta che una SELECT utilizza uno specificatore di tipo WHERE, viene acquisito anche il range lock. In sistemi non basati su lock, questo livello di isolamento può essere implementato mediante il concetto di read/write set o in generale di multiversion concurrency control. 12

Quale scegliere? 1. Per molte applicazioni, la maggior parte delle transazioni possono essere costruite in maniera tale da non richiedere l'utilizzo di livelli di isolamento molto alti (ad esempio SERIALIZABLE), riducendo l'overhead dovuto ai lock 2. Lo sviluppatore deve accertarsi con cautela che le modalità di accesso delle transazioni non causino bug software dovuti alla concorrenza e al rilassamento dei livelli di isolamento. 3. Se si utilizzano unicamente alti livelli di isolamento, la probabilità di deadlock cresce notevolvmente. 13

Stored Procedure Types Type Value Type Description MYSQL_TYPE_TINY TINYINT field MYSQL_TYPE_SHORT SMALLINT field MYSQL_TYPE_LONG INTEGER field MYSQL_TYPE_INT24 MEDIUMINT field MYSQL_TYPE_LONGLONG BIGINT field MYSQL_TYPE_DECIMAL DECIMAL or NUMERIC field MYSQL_TYPE_NEWDECIMAL Precision math DECIMAL or NUMERIC MYSQL_TYPE_FLOAT FLOAT field MYSQL_TYPE_DOUBLE DOUBLE or REAL field MYSQL_TYPE_BIT BIT field MYSQL_TYPE_TIMESTAMP TIMESTAMP field MYSQL_TYPE_DATE DATE field MYSQL_TYPE_TIME TIME field MYSQL_TYPE_DATETIME DATETIME field MYSQL_TYPE_YEAR YEAR field MYSQL_TYPE_STRING CHAR or BINARY field MYSQL_TYPE_VAR_STRING VARCHAR or VARBINARY field MYSQL_TYPE_BLOB BLOB or TEXT field (use max_length to determine the maximum length) MYSQL_TYPE_SET SET field MYSQL_TYPE_ENUM ENUM field MYSQL_TYPE_GEOMETRY Spatial field MYSQL_TYPE_NULL NULL-type field 14

Identifying / Non-Identifying Relationships Una Identifying Relationship identifica quando l'esistenza di una riga in una tabella figlia dipende da una riga in una tabella padre. La relazione logica dice che un figlio non può esistere senza il padre Parte della Primary Key 15

Identifying / Non-Identifying Relationships Una Non-Identifying Relationship identifica relazioni tra righe di tabelle che hanno esistono logicamente indipendentemente l'una dall'altra. Obbligatoria Opzionale 16

Utilizzo di Trigger per emulare le Asserzioni MySQL non supporta le asserzioni (in particolare il comando STOP ACTION non è supportato) Si possono utilizzare trigger before update per emulare il funzionamento delle asserzioni create assertion AT_MOST_ONE_MANAGER as CHECK ((select count(*) from `employees` E where E.ruolo = 'MANAGER') <= 1 ) 17

Utilizzo di Trigger per emulare le Asserzioni create trigger AT_MOST_ONE_MAGANGER before insert on `employees` for each row begin declare counter INT; select count(*) from `employees` E where E.ruolo = 'MANAGER' into counter; if counter > 1 then signal sqlstate '45000'; end if; end 18