SQL - Data Definition Language (DDL)

Transcript

SQL - Data Definition Language (DDL)
SmartLab - DITEN - Università di Genova
http://smartlab.ws
SQL - Data Definition Language (DDL) - Addenda
Dr. Alessandro Ghio
[email protected]
1
ALTER TABLE - Aggiunta di una chiave primaria
http://smartlab.ws
• Supponiamo di aver definito una tabella
• Supponiamo altresì di aver dimenticato di definire la chiave primaria per
questa tabella
• Possiamo utilizzare il comando ALTER TABLE per aggiungere la chiave
primaria in un secondo momento
2
ALTER TABLE - Aggiunta di una chiave primaria
Esempio (1)
http://smartlab.ws
• Creiamo una nuova tabella, che chiamiamo tmp
• Includiamo due campi, un ID alfanumerico di 3 caratteri e un generico
campo Nome
• ID sarebbe chiave primaria, ma per ora non definiamola come tale
3
ALTER TABLE - Aggiunta di una chiave primaria
Esempio (1)
http://smartlab.ws
mysql> CREATE TABLE tmp (
-> ID CHAR(3) NOT NULL,
-> Nome VARCHAR(30)
-> );
4
ALTER TABLE - Aggiunta di una chiave primaria
Esempio (1)
http://smartlab.ws
• Vogliamo ora aggiungere la chiave primaria (ID)
mysql> ALTER TABLE tmp
-> ADD CONSTRAINT PRIMARY KEY (ID);
5
ALTER TABLE - Aggiunta di una chiave primaria
Esempio (2)
http://smartlab.ws
• E se invece volessimo eliminare la primary key esistente e ridefinirla?
• Per esempio, proviamo a eliminare la chiave dalla tabella tmp e riaggiungerla
mysql> ALTER TABLE tmp
-> DROP PRIMARY KEY;
mysql> ALTER TABLE tmp
-> ADD CONSTRAINT PRIMARY KEY (ID);
6
ALTER TABLE - Rimozioni di vincoli
http://smartlab.ws
• Un’altra funzionalità di interesse consiste nella rimozione di vincoli di
integrità in alcuni campi
• Per esempio, potremmo aver definito un vincolo sul numero di acquisti
minimo da parte di un cliente, che potremmo voler ridurre o eliminare
• Supponiamo di aggiungere alla tabella tmp un campo Quantita e di voler
definire un vincolo di integrità Quantita > 5
• Le due operazioni devono essere fatte con due istruzioni SQL separate
7
ALTER TABLE - Rimozione di vincoli
Esempio
http://smartlab.ws
mysql> ALTER TABLE tmp
-> ADD COLUMN Quantita INT;
mysql> ALTER TABLE tmp
-> ADD CONSTRAINT Quantita CHECK(Quantita > 5);
8
ALTER TABLE - Rimozione di vincoli
Esempio
http://smartlab.ws
• Vogliamo ora rimuovere il vincolo sulla quantità
• La sintassi SQL è la seguente:
mysql> ALTER TABLE tmp
-> DROP CONTRAINT Quantita;
ERROR 1064 (42000): You have an error in your SQL syntax; check the
manual that corresponds to your MySQL server version for the right syntax
to use near 'Quantita' at line 2
9
ALTER TABLE - Rimozione di vincoli
Esempio
http://smartlab.ws
• Come mai viene generato un errore?
• Il problema è in un baco di MySQL, che approfondiremo nella prossima
esercitazione
• Di seguito vi anticipo parte di una slide della prossima esercitazione
10
ALTER TABLE - Rimozione di vincoli
Esempio
http://smartlab.ws
• Bug #25660:
• “Hi, I am trying to create table with CHECK constraints, but it creates the
table without CHECK constrains even without warning.”
• Risposta: “The CHECK clause is parsed but ignored by all storage
engines, as reported in http://dev.mysql.com/doc/refman/5.0/en/
create-table.html”
• Questo significa che la clausola CHECK, che fa parte dello standard SQL,
non può essere usata per controlli di integrità in MySQL
11

Documenti analoghi

Riepilogo argomenti svolti dopo la verifica del 15-12-2015

Riepilogo argomenti svolti dopo la verifica del 15-12-2015 c) Caratteristiche della connessione a MySQL (socket, porta tipica). Cenni alla multiutenza in MySQL. d) Avvio di MySQL in XAMPP. Cenni a MySQL installato come servizio Windows. e) Caratteristiche ...

Dettagli

Creare e gestire DB con XAMPP All`apertura del file tra i Tools

Creare e gestire DB con XAMPP All`apertura del file tra i Tools // Per utilizzare i dati che Mysql invia possiamo ricorrere alla funzione mysql_fetch_array // che crea un array associativo avente come indice il nome delle colonne while ($array = mysql_fetch_ar...

Dettagli

Uso ambiente XAMPP sottocartella root dove inserire pagine attive

Uso ambiente XAMPP sottocartella root dove inserire pagine attive

Un commento sul nome

") ; # per concatenare si usa il carattere punto ad esempio echo("Ciao"." "."Alberto") // altro commento echo("Ultima mod...

Dettagli

MySQL

MySQL V2: Il numero di allievi di un corso deve essere minore del numero massino di allievi previsti per i corsi di quel livello V4: il giorno di un corso deve essere un valore tra LUN,MAR,MER,GIO,VEN V5...

Dettagli