Scaricare la presentazione
1
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; CORSI DI FORMAZIONE - Basi di Dati: MySql - Parte 2 - Novembre 2005
2
Esecuzione dei comandi: l’interfaccia 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 l’accesso al database CORSI DI FORMAZIONE - Basi di Dati: MySql - Parte 2 - Novembre 2005
3
Esecuzione dei comandi: l’interfaccia grafica “Query Browser” (2)
Ad esempio, per listare i database creati sul server: 1 - Immettiamo il comando in questa casella … 2 – Clicchiamo sul pulsante “Execute” oppure premiamo Ctrl+Invio … 3 – I risultati ci vengono mostrati nell’area sottostante “Resultset 1” CORSI DI FORMAZIONE - Basi di Dati: MySql - Parte 2 - Novembre 2005
4
I tipi di dati numerici Le colonne delle tabelle possono essere di tipo: Numerico, Stringa, Data/Ora. I principali tipi numerici sono: Nome Val. Minimo Val. Massimo Note TINYINT -128 +127 Unsigned (2^8) BOOLEAN 0=Falso, <>0=Vero SMALLINT 32.767 Unsigned (2^16) MEDIUMINT Unsigned (2^24) INTEGER Unsigned (2^32) BIGINT Unsigned (2^64) 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. CORSI DI FORMAZIONE - Basi di Dati: MySql - Parte 2 - Novembre 2005
5
I tipi di dati stringa e data/ora
I principali tipi di dati stringa sono: Tipo Num. Min. di caratteri Num. Max di caratteri Note CHAR(M) 255 A lunghezza fissa VARCHAR(M) (255 fino alla v. 4) A lunghezza variabile TEXT 65.535 I principali tipi di dati data/ora sono: Tipo Val. Min. Val. Max Note 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' * Il numero di ore è così elevato (838) per consentire differenze tra orari che superino le 24 ore. CORSI DI FORMAZIONE - Basi di Dati: MySql - Parte 2 - Novembre 2005
6
Lo schema del database video_miocognome
PRESTITI Codice prestito Codice_supporto Codice_cliente Data_prestito Data_restituzione Prezzo REGISTI Codice_regista Cognome Nome FILM Codice_film Titolo Codice_regista Codice_protagon Anno 1 SUPPORTI Codice supporto Tipo_supporto Codice_film Quantità 1 1 8 8 8 8 8 ATTORI Codice_attore Cognome Nome 1 CLIENTI Codice_modulo Cognome Nome Telefono 1 Le relazioni sono di tipo: Uno-a-uno Uno-a-molti (in questo schema) Molti-a-molti CORSI DI FORMAZIONE - Basi di Dati: MySql - Parte 2 - Novembre 2005
7
Le prime tre forme normali NF = Normal Form (Esempi)
Schema errato Schema corretto ATTORI Codice: (es. 12) Nome: (es. Sam Neill) ATTORI Codice Cognome Nome 1NF FILM Codice Titolo Nome Regista ... FILM Codice Titolo Cod. Regista (registi in altra tabella) … 2NF PRESTITI Codice Codice supporto Codice Cliente N. telefono cliente … PRESTITI Codice Codice supporto Codice Cliente N. telefono cliente (tabella clienti) 3NF CORSI DI FORMAZIONE - Basi di Dati: MySql - Parte 2 - Novembre 2005
8
Creazione di una tabella DDL (Data Definition Language)
L’istruzione 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, l’istruzione è 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 dall’utente in minuscolo. CORSI DI FORMAZIONE - Basi di Dati: MySql - Parte 2 - Novembre 2005
9
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; 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. CORSI DI FORMAZIONE - Basi di Dati: MySql - Parte 2 - Novembre 2005
10
Creazione della tabella “attori” DDL (Data Definition Language)
L’istruzione 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); CORSI DI FORMAZIONE - Basi di Dati: MySql - Parte 2 - Novembre 2005
11
Relazioni fra tabelle (1)
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; 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; CORSI DI FORMAZIONE - Basi di Dati: MySql - Parte 2 - Novembre 2005
12
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 l’SQL 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. CORSI DI FORMAZIONE - Basi di Dati: MySql - Parte 2 - Novembre 2005
13
Esercitazione N. 2.1 Create le tabelle “supporti”, “clienti” e “prestiti”: SUPPORTI Campo Tipo Ampiezza Vincoli codice_supporto Intero tipo Varchar 3 Non nullo codice_film quantità ATTENZIONE: individuare opportunamente chiavi primarie e chiavi esterne non specificare la clausola “ON DELETE CASCADE” sulla tabella “prestiti” CLIENTI Campo Tipo Ampiezza Vincoli codice_cliente Intero nome Varchar 50 Non nullo cognome telefono 40 PRESTITI Campo Tipo Ampiezza Vincoli codice_prestito Intero codice_supporto Non nullo codice_cliente data_prestito Data data_restituzione prezzo Float CORSI DI FORMAZIONE - Basi di Dati: MySql - Parte 2 - Novembre 2005
14
DML (Data Manipulation Language) INSERT - inserimento di record (1)
REGISTI 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’); ATTORI INSERT INTO film VALUES (1,'Roma città aperta',1,1,1945); INSERT INTO film VALUES (2,'Jurassic Park',2,2,1993); FILM INSERT INTO supporti VALUES (1,’DVD’,1,3); INSERT INTO supporti VALUES (2,’VHS’,2,1); SUPPORTI CORSI DI FORMAZIONE - Basi di Dati: MySql - Parte 2 - Novembre 2005
15
DML (Data Manipulation Language) INSERT - inserimento di record (2)
CLIENTI INSERT INTO clienti VALUES (1,'Enrico','Verdi',' '); INSERT INTO clienti VALUES (2,'Flavia','Conti',' '); INSERT INTO clienti VALUES (3,'Roberta','Toscano',' '); 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 CORSI DI FORMAZIONE - Basi di Dati: MySql - Parte 2 - Novembre 2005
16
DML (Data Manipulation Language) SELECT - 1
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; c, p sono detti ‘alias’ e sono utili per referenziare le tabelle in modo abbreviato CORSI DI FORMAZIONE - Basi di Dati: MySql - Parte 2 - Novembre 2005
17
Esercitazione N. 2.2 Inserire almeno due righe a piacere in ogni tabella creata: | Tables_in_video_diture | | attori | | clienti | | film | | prestiti | | registi | | supporti | 6 rows in set (0.00 sec) CORSI DI FORMAZIONE - Basi di Dati: MySql - Parte 2 - Novembre 2005
18
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) l’aggiornamento verrà effettuato su TUTTI I RECORD DELLA TABELLA. I valori dei campi data e testo sono rinchiusi tra APICI, quelli numerici non hanno delimitatori. CORSI DI FORMAZIONE - Basi di Dati: MySql - Parte 2 - Novembre 2005
19
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. CORSI DI FORMAZIONE - Basi di Dati: MySql - Parte 2 - Novembre 2005
20
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 (l’operazione 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 CORSI DI FORMAZIONE - Basi di Dati: MySql - Parte 2 - Novembre 2005
Presentazioni simili
© 2024 SlidePlayer.it Inc.
All rights reserved.