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