SmartLab - DITEN - Università di Genova http://smartlab.ws SQL - Data Definition Language (DDL) - Yet Another Ddl Addenda (YADA) Dr. Alessandro Ghio [email protected] 1 ALTER TABLE - modifiche alle chiavi esterne http://smartlab.ws • Nelle prossime slide vedremo, in ordine: • Come aggiungere chiavi esterne non precedentemente definite • Come cancellare chiavi esterne precedentemente definite • Come modificare chiavi esterne precedentemente definite • Per semplicità di trattazione non seguiremo esattamente questo ordine, ma partiremo dalla rimozione, proseguiremo con l’aggiunta e concluderemo con la modifica di foreign keys 2 ALTER TABLE - Eliminazione di una chiave esterna http://smartlab.ws • Supponiamo di aver definito una tabella con chiavi esterne nel database esercizio1 • Per esempio, consideriamo la tabella vendite, per la quale avevamo definito due chiavi esterne CFCliente e IdProdotto • Supponiamo di voler cancellare la chiave esterna CFCliente • Come facciamo? • Lo standard SQL recita: • ALTER TABLE tabella DROP FOREIGN KEY etichetta_foreign_key; • Il problema è quindi identificare l’etichetta della chiave esterna 3 ALTER TABLE - Eliminazione di una chiave esterna http://smartlab.ws • Per identificare l’etichetta è sufficiente lanciare un comando SHOW CREATE TABLE Label 4 ALTER TABLE - Eliminazione di una chiave esterna http://smartlab.ws • Per eliminare la chiave è quindi sufficiente lanciare il comando • ALTER TABLE vendite DROP FOREIGN KEY vendite_ibfk_1; 5 ALTER TABLE - Aggiunta di una chiave esterna http://smartlab.ws • Per aggiungere una chiave esterna è sufficiente eseguire il seguente comando • ALTER TABLE tabella ADD FOREIGN KEY (campo_referenziante) REFERENCES tabella_referenziata(campo_referenziato) [ON UPDATE <CASCADE | SET DEFAULT | SET NULL | NO ACTION>] [ON DELETE <CASCADE | SET DEFAULT | SET NULL | NO ACTION>] • Per esempio, supponiamo di voler aggiungere nuovamente la chiave esterna CFCliente • Supponiamo di definire un’azione per il DELETE ma non per l’UPDATE, così in seguito vedremo come modificare il vincolo di chiave esterna • Attenzione: contrariamente a quanto indicato nelle slide originali (e allo standard SQL...), MySQL setta come azione di default per DELETE e UPDATE il NO ACTION (vedete anche errata corrige dell’esercitazione 3) 6 ALTER TABLE - Aggiunta di una chiave esterna http://smartlab.ws • Il comando è quindi • ALTER TABLE vendite ADD FOREIGN KEY (CFCliente) REFERENCES anagrafica(CodiceFiscale) ON DELETE NO ACTION; • Potete verificare con uno SHOW CREATE TABLE il felice esito del comando 7 ALTER TABLE - Modifica di una chiave esterna http://smartlab.ws • Vogliamo ora modificare la chiave esterna CFCliente in modo da definire un’operazione di tipo CASCADE per l’UPDATE • Non esiste nello standard SQL, sfortunatamente, un comando per alterare un vincolo di chiave esterna • Pertanto, per modificare una chiave esterna occorre: • Cancellare il vincolo di chiave esterna da modificare • Crearne uno nuovo con tutti i crismi • Tutte le operazioni di modifica sono in generale da ritenersi “pericolose” per l’integrità del database: usatele sempre con cautela e limitatene l’utilizzo in generale e, eventualmente, alla sola fase di progetto 8 ALTER TABLE - Modifica di una chiave esterna http://smartlab.ws 9