back to top

Modificare le tabelle in MySQL: il comando ALTER TABLE

Fino a questo punto della nostra guida a MySQL abbiamo visto come creare una tabella, vediamo ora come modificarne la struttura dopo averla creata.

Capita spesso, infatti, di dover intervenire sul database per apportare delle modifiche alla struttura delle tabelle perchè, ad esempio, ci si è accorti che in fase di creazione qualcosa è stato tralasciato oppure perchè, passando in produzione, sono emerse nuove esigenze che richiedono un ripensamento del lavoro fatto.

Per effettuare modifiche alle tabelle MySQL faremo ricorso al comando ALTER TABLE grazie al quale potremo effettuare diverse operazioni; le più importanti:

  • rinominare la tabella;
  • cambiare il set di caratteri e la collation della tabella;
  • aggiungere colonne;
  • cancellare colonne;
  • rinominare colonne;
  • modificare le caratteristiche delle colonne (ad esempio il tipo di dato ospitato o la dimensione);
  • spostare colonne;
  • aggiungere o cancellare indici.

Rinominare una tabella

Come detto possiamo utilizzare il comando ALTER TABLE per rinominare una tabella; per fare ciò utilizzeremo questa sintassi:

ALTER TABLE nome_tabella RENAME TO nuovo_nome_tabella;

In alternativa è possibile utilizzare il comando RENAME TABLE in questo modo:

RENAME TABLE nome_tabella TO nuovo_nome_tabella;

E’ anche possibile rinominare più tabelle simultaneamente:

RENAME TABLE
nome_tabella_uno TO nuovo_nome_tabella_uno,
nome_tabella_due TO nuovo_nome_tabella_due
nome_tabella_tre TO nuovo_nome_tabella_tre;

Cambiare charset e collation

Attraverso ALTER TABLE è possibile convertire una tabella ad un nuovo set di caratteri. Supponiamo, ad esempio, di avere una tabella con charset Latin1 e di volerla convertire a UTF8:

ALTER TABLE nome_tabella
CONVERT TO CHARACTER SET utf8
COLLATE utf8_unicode_ci;

Aggiungere una nuova colonna ad una tabella MySQL

Vediamo come utilizzare ALTER TABLE per aggiungere una nuova colonna all’interno di una tabella MySQL. Supponiamo, ad esempio, di voler aggiungere la colonna "email" alla nostra tabella "amici" (già utilizzata in diversi esempi delle precedenti lezioni).

ALTER TABLE amici ADD COLUMN email VARCHAR(60);

Mediante questa istruzione la nuova colonna "email" verrà aggiunta in fondo alla nostra tabella. Qualora avessimo voluto posizionarla come prima colonna avremmo dovuto utilizzare la clausola FIRST al termine dell’istruzione:

ALTER TABLE amici ADD COLUMN email VARCHAR(60) FIRST;

Qualora, invece, avessimo voluto metterla dopo la colonna "cognome" avremmo dovuto usare la clausola AFTER seguita dal nome della colonna a cui affiancarsi:

ALTER TABLE amici ADD COLUMN email VARCHAR(60) AFTER cognome;

Volendo è possibile utilizzare un’unica istruzione per aggiungere più di una colonna:

ALTER TABLE amici
ADD COLUMN email VARCHAR(60) AFTER cognome,
ADD COLUMN cellulare INT(10) AFTER email,
ADD COLUMN indirizzo VARCHAR(100) AFTER cellulare;

Cancellare una colonna da una tabella MySQL

Se abbiamo l’esigenza di eliminare un campo da una nostra tabella MySQL, grazie ad ALTER TABLE è possibile farlo. Supponiamo, ad esempio, di voler eliminare dalla tabella "amici" il campo "email" appena aggiunto:

ALTER TABLE amici DROP COLUMN email;

Se si desidera rimuovere più di un campo simultaneamente è possibile farlo (esattamente come nel caso dell’aggiunta):

ALTER TABLE amici
DROP COLUMN email,
DROP COLUMN cellulare,
DROP COLUMN indirizzo;

Rinominare colonne

Attraverso ALTER TABLE è possibile cambiare il nome di un campo, per farlo però sarà necessario ridefinirne nuovamente tutte le caratteristiche. Vediamo un esempio:

ALTER TABLE amici CHANGE cellulare telefono_cellulare INT(10);

Con l’istruzione CHANGE abbiamo rinominato la colonna "cellulare" in "telefono_cellulare" ma per farlo abbiamo dovuto definire nuovamente il datatype e la lunghezza del campo anche se sono rimasti invariati.

Modificare le colonne

Vediamo ora come apportare modifiche alla struttura delle colonne. Supponiamo di voler cambiare il campo "cellulare" (che nei precedenti esempi era un INT di lunghezza 10) per trasformarlo in un VARCHAR con lunghezza 20. Per farlo scriveremo la seguente istruzione:

ALTER TABLE amici MODIFY cellulare VARCHAR(20);

In questo caso abbiamo utilizzato l’istruzione MODIFY di MySQL la quale assolve allo stesso compito di CHANGE senza, tuttavia, richiedere la definizione di un nuovo nome per la colonna. Volendo avremmo potuto effettuare la stessa operazione con CHANGE in questo modo:

ALTER TABLE amici CHENGE cellulare cellulare VARCHAR(20);

In pratica abbiamo "rinominato" la colonna "cellulare" in "cellulare" ๐Ÿ™‚

Ovviamente è possibile alterare più di una colonna simultaneamente, ad esempio:

ALTER TABLE amici
MODIFY cellulare VARCHAR(20),
MODIFY indirizzo VARCHAR(150);

Spostare le colonne

Attraverso ALTER TABLE è anche possibile modificare l’ordine delle colonne, per farlo si utilizza l’istruzione CHANGE o MODIFY simultaneamente alla keyword AFTER seguita dal nome di un altro campo. Supponiamo, ad esempio, di voler spostare la colonna "cellulare" della nostra ipotetica tabella "amici" dopo la colonna "indirizzo":

ALTER TABLE amici MODIFY COLUMN cellulare VARCHAR(20) AFTER indirizzo;

Lo stesso risultato sarebbe stato possibile anche in fase di rinominamento della colonna, in questo modo:

ALTER TABLE amici CHANGE cellulare telefono_cellulare VARCHAR(20) AFTER indirizzo;

Aggiungere un indice ad una tabella MySQL

Degli indici abbiamo prlato diffusamente nella precedente lezione, come detto questi possono essere definiti in fase di creazione della tabella o aggiunti successivamente mediante il comando CREATE INDEX oppure mediante, appunto, ALTER TABLE. Vediamo come procedere mediante questo comando.

Supponiamo di voler aggiungere un indice sul campo "cognome" della nostra tabella "amici":

ALTER TABLE amici ADD INDEX index_cognome (cognome);

Se avessimo voluto creare un indice di tipo UNIQUE per indicizzare la colonna "cellulare" avremmo utilizzato:

ALTER TABLE amici ADD UNIQUE INDEX index_cellulare (cellulare);

Se invece avessimo voluto utilizzare il campo "cellulare" come chiave primaria avremmo utilizzato:

ALTER TABLE amici ADD PRIMARY KEY(cellulare);

Aggiungere un indice con AUTO INCREMENT

Attraverso ALTER TABLE avremmo anche potuto aggiungere alla tabella un indice di tipo numerico auto incrementale. Solitamente questa caratteristica è tipica degli indici primari. Supponiamo quindi di voler aggiungere alla nostra tabella (qualora ovviamente ne fosse priva) un indice primario di tipo AUTO INCREMENT modificando un preesistente campo "id":

ALTER TABLE nome_tabella MODIFY id INT(10) AUTO_INCREMENT PRIMARY KEY;

La definizione PRIMARY KEY è necessaria solo se la colonna "id" non era stata definita come tale in fase di creazione della tabella. In caso contrario avremmo potuto renderla auto-incrementale così:

ALTER TABLE nome_tabella MODIFY id INT(10) AUTO_INCREMENT;

Eliminare un indice da una tabella MySQL

Ovviamente per impostare una chiave primaria è necessario che non ne sia già stata impostata un’altra; se esiste già una chiave primaria e la si vuole eliminare si può utilizzare la sintassi di DROP INDEX vista alle lezione precedente, oppure utilizzare ALTER TABLE in questo modo:

ALTER TABLE amici DROP PRIMARY KEY;

Se si desidera eliminare un indice semplice, invece, utilizzeremo:

ALTER TABLE amici DROP INDEX index_cognome;

Verificare il buon esisto delle modifiche

Una volta conclue le modifiche è buona norma verificare che tutto sia andato per il meglio. Al fine di verificare la nuova struttura della nostra tabella, come abbiamo già visto, possiamo utilizzare il comando DESCRIBE in questo modo:

DESCRIBE amici;

Così facendo ci verrà restituita la struttura attuale della nostra tabella con l’elenco dei capi, il rispettivo datatype, la lunghezza, valori di default, chiavi, ecc.

Pubblicitร 
Massimiliano Bossi
Massimiliano Bossi
Stregato dalla rete sin dai tempi delle BBS e dei modem a 2.400 baud, ho avuto la fortuna di poter trasformare la mia passione in un lavoro (nonostante una Laurea in Giurisprudenza). Adoro scrivere codice e mi occupo quotidianamente di comunicazione, design e nuovi media digitali. Orgogliosamente "nerd" sono il fondatore di MRW.it (per il quale ho scritto centinaia di articoli) e di una nota Web-Agency (dove seguo in prima persona progetti digitali per numerosi clienti sia in Italia che all'estero).

In questa guida...