La presentazione è in caricamento. Aspetta per favore

La presentazione è in caricamento. Aspetta per favore

CORSI DI FORMAZIONE - Basi di Dati: MySql - Parte 2 - Novembre 2005 1 Creazione di un database MySQL Dopo esserci collegati al server MySQL con: mysql.

Presentazioni simili


Presentazione sul tema: "CORSI DI FORMAZIONE - Basi di Dati: MySql - Parte 2 - Novembre 2005 1 Creazione di un database MySQL Dopo esserci collegati al server MySQL con: mysql."— Transcript della presentazione:

1 CORSI DI FORMAZIONE - Basi di Dati: MySql - Parte 2 - Novembre Creazione di un database MySQL Dopo esserci collegati al server MySQL con: mysql -u root -p -h pc_docente dal prompt possiamo creare un database col comando: mysql> CREATE DATABASE video_miocognome; … e poi impostarlo come database di default: mysql> USE video_miocognome; NOTA: Una volta creato il database, è possibile anche selezionarlo direttamente nel comando di avvio della shell di MySQL con: mysql -u root -p -h pc_docente video_miocognome Per eliminare un database, con relativa perdita di tutti i dati, facciamo uso del comando: mysql> DROP DATABASE video_miocognome; Per uscire dalla shell di MySQL: mysql> exit;

2 CORSI DI FORMAZIONE - Basi di Dati: MySql - Parte 2 - Novembre Esecuzione dei comandi: linterfaccia grafica Query Browser (1) Per inviare i comandi ad un server MySQL è possibile utilizzare il programma Query Browser, come indicato nelle figure sottostanti: Forniamo i dati per laccesso al database

3 CORSI DI FORMAZIONE - Basi di Dati: MySql - Parte 2 - Novembre Esecuzione dei comandi: linterfaccia grafica Query Browser (2) 1 - Immettiamo il comando in questa casella … 2 – Clicchiamo sul pulsante Execute oppure premiamo Ctrl+Invio … 3 – I risultati ci vengono mostrati nellarea sottostante Resultset 1 Ad esempio, per listare i database creati sul server:

4 CORSI DI FORMAZIONE - Basi di Dati: MySql - Parte 2 - Novembre I tipi di dati numerici Le colonne delle tabelle possono essere di tipo: Numerico, Stringa, Data/Ora. I principali tipi numerici sono: NomeVal. MinimoVal. MassimoNote TINYINT Unsigned (2^8) BOOLEAN 0=Falso, <>0=Vero SMALLINT Unsigned (2^16) MEDIUMINT Unsigned (2^24) INTEGER Unsigned (2^32) BIGINT Unsigned (2^64) NomeNote FLOAT Numero a singola precisione. Valori da E+38 a E-38, 0, da E-38 a E+38. Unsigned=non negativo DOUBLE Numero a precisione doppia. Values da E+308 a E-308, 0, e da E-308 a E+308. Unsigned=non negativo Per questi tipi (bool escluso) è possibile aggiungere la parola chiave UNSIGNED. Il tipo SERIAL equivale a BIGINT UNSIGNED NOT NULL AUTO_INCREMENT ed è un progressivo automatico.

5 CORSI DI FORMAZIONE - Basi di Dati: MySql - Parte 2 - Novembre I tipi di dati stringa e data/ora TipoNum. Min. di caratteri Num. Max di caratteriNote CHAR(M)0255A lunghezza fissa VARCHAR(M) (255 fino alla v. 4)A lunghezza variabile TEXT I principali tipi di dati stringa sono: TipoVal. Min.Val. MaxNote DATE' '' 'Formato 'YYYY-MM-DD' DATETIME' :00:00'' :59:59' TIMESTAMP' :00:00' :59:59 TIME *'-838:59:59''838:59:59'Formato 'HH:MM:SS' I principali tipi di dati data/ora sono: * Il numero di ore è così elevato (838) per consentire differenze tra orari che superino le 24 ore.

6 CORSI DI FORMAZIONE - Basi di Dati: MySql - Parte 2 - Novembre Lo schema del database video_miocognome REGISTI Codice_regista Cognome Nome SUPPORTI Codice supporto Tipo_supporto Codice_film Quantità FILM Codice_film Titolo Codice_regista Codice_protagon Anno CLIENTI Codice_modulo Cognome Nome Telefono PRESTITI Codice prestito Codice_supporto Codice_cliente Data_prestito Data_restituzione Prezzo Le relazioni sono di tipo: -Uno-a-uno -Uno-a-molti (in questo schema) -Molti-a-molti ATTORI Codice_attore Cognome Nome 8 1

7 CORSI DI FORMAZIONE - Basi di Dati: MySql - Parte 2 - Novembre Le prime tre forme normali NF = Normal Form (Esempi) Schema erratoSchema corretto ATTORI Codice: (es. 12) Nome: (es. Sam Neill) ATTORI Codice Cognome Nome FILM Codice Titolo Nome Regista... FILM Codice Titolo Cod. Regista (registi in altra tabella) … PRESTITI Codice Codice supporto Codice Cliente N. telefono cliente … PRESTITI Codice Codice supporto Codice Cliente N. telefono cliente (tabella clienti) 1NF 2NF 3NF

8 CORSI DI FORMAZIONE - Basi di Dati: MySql - Parte 2 - Novembre Creazione di una tabella DDL (Data Definition Language) Listruzione per creare la tabella registi, da eseguire al prompt di MySQL, è la seguente: CREATE TABLE registi ( codice_regista INTEGER PRIMARY KEY, nome VARCHAR(50) NOT NULL, cognome VARCHAR(50) NOT NULL ); Significato delle parole chiave: PRIMARY KEY: indica che il campo codice è la chiave primaria NOT NULL: indica che il valore è da inserire obbligatoriamente, cioè non può essere non valorizzato (NULL) Per eliminare una tabella, listruzione è la seguente: DROP TABLE registi; Note: premendo i tasti direzionali Sù e Giù possiamo scorrere la storia dei comandi inviati con la shell di MySQL. Per chiarezza del codice SQL è consigliato scrivere le parole chiave in maiuscolo, quelle scelte dallutente in minuscolo.

9 CORSI DI FORMAZIONE - Basi di Dati: MySql - Parte 2 - Novembre Modifica della struttura di una tabella (DDL) Aggiunta di una colonna (campo): ALTER TABLE registi ADD COLUMN note VARCHAR(100); Modifica di una colonna: ALTER TABLE registi MODIFY COLUMN note VARCHAR(150); Vediamo il risultato con: DESC registi; Eliminazione di una colonna: ALTER TABLE registi DROP COLUMN note; DESC registi; Creazione di un indice univoco: CREATE UNIQUE INDEX idx_registi ON registi(nome,cognome); La parola unique è opzionale. Se inserita indica che la coppia nome+cognome dei registi non deve ripetersi. Un indice è utile per una ricerca rapida basata sui campi indicizzati ma, allo stesso tempo, rallenta i tempi di esecuzione delle altre istruzioni di manipolazioni dei dati.

10 CORSI DI FORMAZIONE - Basi di Dati: MySql - Parte 2 - Novembre Creazione della tabella attori DDL (Data Definition Language) Listruzione per creare la tabella attori, da eseguire al prompt di MySQL, è la seguente: CREATE TABLE attori ( codice_attore INTEGER PRIMARY KEY, nome VARCHAR(50) NOT NULL, cognome VARCHAR(50) NOT NULL ); Creazione di un indice univoco: CREATE UNIQUE INDEX idx_attori ON attori(nome,cognome);

11 CORSI DI FORMAZIONE - Basi di Dati: MySql - Parte 2 - Novembre Relazioni fra tabelle (1) Creiamo la tabella film, collegata col le tabelle registi ed attori in quanto per ogni film impostiamo un regista ed un attore protagonista: CREATE TABLE film ( codice_film INTEGER PRIMARY KEY, titolo VARCHAR(100) NOT NULL, codice_regista INTEGER NOT NULL, FOREIGN KEY (codice_regista) REFERENCES registi(codice_regista) ON DELETE CASCADE, codice_attore INTEGER NOT NULL, FOREIGN KEY (codice_attore) REFERENCES attori(codice_attore) ON DELETE CASCADE, anno INTEGER NOT NULL ) TYPE=INNODB; Le relazioni possono essere impostate solo se le tabelle sono di tipo INNODB, per cui è necessario modificare il tipo tabella: ALTER TABLE registi TYPE=INNODB; ALTER TABLE attori TYPE=INNODB;

12 CORSI DI FORMAZIONE - Basi di Dati: MySql - Parte 2 - Novembre Relazioni fra tabelle (2) Con riferimento alla relazione tra la tabella film e la tabella registi, notiamo che il campo che collega le due tabelle è il codice regista e, nella tabella film, è chiamato chiave esterna mentre nella tabella registi deve essere chiave primaria. Per rivedere lSQL di creazione delle tabelle: SHOW CREATE TABLE registi; SHOW CREATE TABLE attori; SHOW CREATE TABLE film; La clausola ON DELETE CASCADE consente di eliminare automaticamente a catena tutti i film associati ad un regista se questo ultimo viene eliminato (USARE CON CAUTELA). Lo stesso vale per la cancellazione di un attore.

13 CORSI DI FORMAZIONE - Basi di Dati: MySql - Parte 2 - Novembre Esercitazione N. 2.1 Create le tabelle supporti, clienti e prestiti: SUPPORTI CampoTipoAmpiezzaVincoli codice_supportoIntero tipoVarchar3Non nullo codice_filmInteroNon nullo quantitàInteroNon nullo CLIENTI CampoTipoAmpiezzaVincoli codice_clienteIntero nomeVarchar50Non nullo cognomeVarchar50Non nullo telefonoVarchar 40 Non nullo PRESTITI CampoTipoAmpiezzaVincoli codice_prestitoIntero codice_supportoInteroNon nullo codice_clienteInteroNon nullo data_prestitoDataNon nullo data_restituzioneData prezzoFloat ATTENZIONE: - individuare opportunamente chiavi primarie e chiavi esterne - non specificare la clausola ON DELETE CASCADE sulla tabella prestiti

14 CORSI DI FORMAZIONE - Basi di Dati: MySql - Parte 2 - Novembre DML (Data Manipulation Language) INSERT - inserimento di record (1) INSERT INTO registi VALUES(1,Roberto,Rossellini); INSERT INTO registi VALUES(2,Steven,Spielberg); INSERT INTO attori VALUES(1,Anna,Magnani); INSERT INTO attori VALUES(2,Sam,Neill); INSERT INTO film VALUES (1,'Roma città aperta',1,1,1945); INSERT INTO film VALUES (2,'Jurassic Park',2,2,1993); REGISTI ATTORI FILM INSERT INTO supporti VALUES (1,DVD,1,3); INSERT INTO supporti VALUES (2,VHS,2,1); SUPPORTI

15 CORSI DI FORMAZIONE - Basi di Dati: MySql - Parte 2 - Novembre DML (Data Manipulation Language) INSERT - inserimento di record (2) INSERT INTO clienti VALUES (1,'Enrico','Verdi',' '); INSERT INTO clienti VALUES (2,'Flavia','Conti',' '); INSERT INTO clienti VALUES (3,'Roberta','Toscano',' '); CLIENTI INSERT INTO prestiti VALUES (1,1,1,' ',' ',1); INSERT INTO prestiti VALUES (2,1,3,' ',NULL,1); INSERT INTO prestiti (codice_prestito, codice_supporto, codice_cliente, data_prestito, prezzo) VALUES (3,1,2,' ',2); INSERT INTO prestiti VALUES (4,2,2,' ',NULL,2.50); PRESTITI

16 CORSI DI FORMAZIONE - Basi di Dati: MySql - Parte 2 - Novembre Estrazione di tutti i corsi inseriti ordinati per titolo: SELECT codice_film, titolo FROM film ORDER BY titolo; (al posto della lista dei campi è possibile mettere * per estrarre TUTTI i campi della tabella) Estrazione di tutti i prestiti del cliente Conti (con codice 2), ordinati per data_prestito a partire dal più recente per i quali non è stato ancora restituito il supporto (JOIN): SELECT c.cognome, c.nome, p.data_prestito, p.prezzo FROM clienti c, prestiti p WHERE c.codice_cliente=p. codice_cliente AND p.data_restituzione IS NULL ORDER BY p.data_prestito DESC; DML (Data Manipulation Language) SELECT - 1 c, p sono detti alias e sono utili per referenziare le tabelle in modo abbreviato

17 CORSI DI FORMAZIONE - Basi di Dati: MySql - Parte 2 - Novembre Esercitazione N. 2.2 Inserire almeno due righe a piacere in ogni tabella creata: | Tables_in_video_diture | | attori | | clienti | | film | | prestiti | | registi | | supporti | rows in set (0.00 sec)

18 CORSI DI FORMAZIONE - Basi di Dati: MySql - Parte 2 - Novembre DML (Data Manipulation Language) UPDATE Per aggiornare un campo (o più campi) di una tabella: UPDATE prestiti SET data_restituzione= WHERE codice_prestito=1; Aggiornamento dei dati relativi al prestito con codice 2 (due campi, data restituzione e prezzo): UPDATE prestiti SET data_restituzione= , prezzo=2.50 WHERE codice_prestito=2; NOTE: Se non si specifica alcuna condizione (WHERE) laggiornamento verrà effettuato su TUTTI I RECORD DELLA TABELLA. I valori dei campi data e testo sono rinchiusi tra APICI, quelli numerici non hanno delimitatori.

19 CORSI DI FORMAZIONE - Basi di Dati: MySql - Parte 2 - Novembre DML (Data Manipulation Language) DELETE Per eliminare uno o più record da una tabella è necessario specificarne il nome e una condizione (se la condizione non viene specificata, verranno eliminati TUTTI I RECORD). Eliminazione del prestito con codice 3: DELETE FROM prestiti WHERE codice_prestito=3; Se tentiamo di cancellare un cliente con prestiti, verrà emesso un messaggio di errore(*) a causa della violazione del vincolo di integrità impostato sulla tabella prestiti (su codice_cliente): DELETE FROM clienti WHERE codice_cliente=2; ERROR 1217 (23000): Cannot delete or update a parent row: a foreign key constraint fails (*) solo se non è stata specificata la clausola ON DELETE CASCADE nella creazione della tabella.

20 CORSI DI FORMAZIONE - Basi di Dati: MySql - Parte 2 - Novembre Esercitazione N. 2.3 Scrivere le istruzioni SQL per: Aggiornare la data di restituzione del prestito con codice 2 a Cancellare il cliente con codice 4 (loperazione potrebbe non riuscire … perché ?) Selezionare tutti gli attori ordinati per cognome e nome Selezionare il titolo ed il nome del regista di tutti i film archiviati


Scaricare ppt "CORSI DI FORMAZIONE - Basi di Dati: MySql - Parte 2 - Novembre 2005 1 Creazione di un database MySQL Dopo esserci collegati al server MySQL con: mysql."

Presentazioni simili


Annunci Google