Stage Estivo D A T A B A S E Claudio Bisegni [email protected] http://www.lnf.infn.it/~bisegni introduzione l’informatica nella gestione dati • • • • sistemi informativi, applicazioni bancarie ecc. un sistema organizzato di dati grande quantità di dati efficienza nella gestione introduzione perché usiamo un database • • • • memorizzare su Database o File accesso multi utente accessi in concorrenza lettura/scrittura velocità di accesso ai dati introduzione perché usiamo un database Schema di un sistema informativo introduzione progettare e usare un database • • analisi dei dati analisi delle relazioni tra i dati introduzione ipotesi di un progetto • dati da gestire • relazioni logiche dei dati • • • • • Alunni Classi Gruppi Culturali (Sport, Scienza, Musica, ecc…). Un alunno potrà essere associato ad una sola classe. Un alunno potrà essere associato a nessuno, uno o molti gruppi. introduzione Primary Key & Foreign Key • Primary Key - identifica univocamente il record in una tabella • • • uno o più colonne possono essere usate come primary key solo valori univoci (ovvio) Foreign Key - definisce una relazione tra due tabelle • • • uno o più colonne possono essere usate come foreign key la relazione tra due tabelle può avere una o più foreign key una tabella può essere relazionata a una o più tabelle o con se stessa introduzione Primary Key & Foreign Key • PK & FK nella relazioni logiche dei nostri dati • • Un alunno potrà essere associato ad una sola classe. Un alunno potrà essere associato a nessuno, uno o molti gruppi. • • • PK - campo id di ogni tabella FK - alunno: alunno.id_classe verso classe.id FK - alunno_gruppo: alunno_gruppo.id_alunno verso alunno.id alunno_gruppo.id_gruppo verso gruppo.id Linguaggio SQL Linguaggio SQL (mysql) introduzione • SQL Structured Query Language • • diviso in tre sottoinsiemi Linguaggio per l’accesso ai database • • DDL - Data Definition Language - creazione e modifica dei database DML - Data Manipulation Language - inserimento modifica e cancellazione dei dati DCL - Data Control Language - gestione utenti e permessi Linguaggio SQL (mysql) creazione database • connessione come utente root: mysql –u root –p • creazione di un database: CREATE DATABASE nome_database; • cancellazione di un database: DROP DATABASE nome_database; Linguaggio SQL (mysql) creazione e gestione utente • connessione come utente root: mysql –u root –p • creazione di un utente: • rimozione di un utente: • gestione privilegi utente: CREATE USER ‘nome_utente’@‘nome_host’ IDENTIFIED BY ‘pwd’; DROP USER ‘nome_utente’@‘nome_host’; GRANT tipo_privilegio ON {nome_tabella | * | *.* | nome_db.*} TO ‘nome_utente’@‘nome_host’; REVOKE tipo_privilegio ON {nome_tabella | * | *.* | nome_db.*} FROM ‘nome_utente’@‘nome_host’; Linguaggio SQL (mysql) creazione tabelle • creazione di una tabella: CREATE TABLE ‘nome_tabella’ ( nome_colonna1 parametri,......, nome_colonna1 parametri) TYPE=tipo_tabella parametri: • tipo_dato [NOT NULL | NULL] [DEFAULT valore_di_default] [AUTO_INCREMENT] [UNIQUE [KEY] | [PRIMARY] KEY] [COMMENT 'commento'] Linguaggio SQL (mysql) creazione tabelle • tipo dato: BIT[(lunghezza)] INT[(lunghezza)] [UNSIGNED] [ZEROFILL] INTEGER[(lunghezza)] [UNSIGNED] [ZEROFILL] BIGINT[(lunghezza)] [UNSIGNED] [ZEROFILL] REAL[(lunghezza,decimali)] [UNSIGNED] [ZEROFILL] DOUBLE[(lunghezza,decimali)] [UNSIGNED] [ZEROFILL] FLOAT[(lunghezza,decimali)] [UNSIGNED] [ZEROFILL] DECIMAL(lunghezza,decimali) [UNSIGNED] [ZEROFILL] NUMERIC(lunghezza,decimali) [UNSIGNED] [ZEROFILL] DATE TIMESTAMP VARCHAR(lunghezza) [CHARACTER SET charset_name] [COLLATE collation_name] BLOB TEXT [BINARY] Linguaggio SQL (mysql) creazione tabelle • tipo tabella: • • • MYSQ mette a disposizione vari tipi di algoritmi per costruire tabelle nel manuale del corso viene usata la tipologia “innodb” innodb supporta: • • • • le transazioni row locking foreign key indici: • • possono essere creati per ogni colonna • se ben gestiti migliorano le prestazioni di ricerca consigliati solo per le colonne su cui si effettuano delle ricerche(select) Linguaggio SQL (mysql) creazione indici e foreign key • creazione di un indice: • creazione foreign key ALTER TABLE tabella ADD INDEX (campo) ALTER TABLE tabella ADD CONSTRAINT nome_foreign_key FOREIGN KEY nome_campo REFERENCES tabella_destinazione (nome_campo) ON DELETE tipo_fk ON UPDATE tipo_fk. tipo_fk: • RESTRICT, annulla tutte le operazioni di Update e Delete della tabella_destinazione della FK • NO ACTION, (Identica alla RESTRICT) • CASCADE, dopo un operazione di Delete o Update alla tabella_destinazione applica la Delete o Update ai campi corrispondenti • SET NULL, dopo un operazione di Delete o Update alla tabella_destinazione applica il valore nullo ai campi corrispondenti Linguaggio SQL (mysql) inserimento • inserimento di valori in tabella INSERT INTO nome_tabella (colonna_1,colonna_2…colonna_N) VALUES (valore_1, valore_2, …., valore_N) Linguaggio SQL (mysql) ricerca • ricerca dei dati in tabella • SELECT [DISTINCT] campo_1[,campo_2...] FROM nome_tabella AS alias [WHERE condizione_di_ricerca] [ORDER BY condizione_di_ordinamento [ASC | DESC]] • • campo_N - nome del campo della tabella d visualizzare. [nome_tabella,alias]. campo_N - forma alternativa per la selezione del campo da visualizzare (indispensabile nella join). alias - nome alternativo della tabella, indispensabile nelle join • • • condizione_di_ricerca - permettono di impostare delle condizioni che filtrino i dati desiderati es: campo_1 = valore o campo_1 like ‘%nf%’. Si può specificare se in ordine ascendente o discendente. like - permette di definire dei valori con i caratteri jolly: • % - n caratteri qualsiasi • _ - un carattere qualsiasi Linguaggio SQL (mysql) ricerca • ricerca dei dati in più tabelle (join) possibilità di ricercare dati mostrando il risultato combinando campi di diverse tabelle SELECT [DISTINCT] campo_1[,campo_2...] FROM nome_tabella AS alias [, nome_tabella_2 AS alias_2,...] [WHERE condizione_di_ricerca] [ORDER BY condizione_di_ordinamento [ASC | DESC]] • • condizione_di_ricerca - simile alla select tradizionale, in questo caso viene aggiunta la condizione che mette in uguaglianza i campi FK di una tabella con i campi PK di un altra, es: alias.nome_campo_fk = alias2.nome_campo_pk condizione_di_ordinamento - identica alla select tradizionale Linguaggio SQL (mysql) modifica • modifica dei dati in tabella UPDATE nome_tabella SET colonna_1 = valore_1 [, colonna_2 = valore_2 ...] [WHERE condizione] condizione - identica alla condizione della select Linguaggio SQL (mysql) cancellazione • cancellazione dei dati in una tabella DELETE FROM nome_tabella [WHERE condizione] condizione - identica alla condizione della select Linguaggio SQL (mysql) transazioni • • cosa sono: • permettono, momentaneamente, di modificare i dati nel database senza in realtà modificare il reale database • • • le modifiche sono visibili solo alla propria sessione le modifiche possono essere annullate(rollback) o salvate(commit) le innodb sopportano le transazioni attivare le transazioni: • AUTOCOMMIT attivo di default - dopo ogni comando sql viene automaticamente eseguita la commit non esiste quindi nessuna transazione • • SET AUTOCOMMIT 0 - abilitazione delle transazioni SET AUTOCOMMIT 1 - disabilitazione delle transazioni Fine