MYSQL – ALTERARE, RIMUOVERE, RINOMARE, MODIFICARE
⚡ Riepilogo intelligente
ALTER, DROP, RENAME e MODIFY sono le MySQL Comandi che rimodellano un database dopo che è già in uso. Permettono di aggiungere, rimuovere, rinominare e ridefinire oggetti come tabelle e colonne senza eliminare le righe già memorizzate.

Che cos'è il comando ALTER in MySQL?
Migliori ETÀ Il comando modifica un database, una tabella, una vista o un altro oggetto del database esistente che necessita di modifiche durante il ciclo di vita del database. È il comando che consente a uno schema di evolversi dopo che è già stato creato e popolato con i dati.
I requisiti aziendali raramente rimangono statici e la progettazione di un database deve evolversi di pari passo. Supponiamo che il progetto del database di Myflix sia stato implementato e che gli utenti lo stiano già utilizzando, e solo allora il team si renda conto che sono state omesse informazioni vitali. Nessuno vuole perdere le righe esistenti; vogliono semplicemente registrare le nuove informazioni accanto a quelle già presenti.
L'istruzione ALTER gestisce proprio questa situazione. Può modificare il tipo di dati di un campo da stringa a numero, rinominare un campo o aggiungere una colonna completamente nuova a una tabella, il tutto mantenendo intatti i dati già presenti nella tabella.
Una volta stabilito lo scopo del comando, il passo successivo è la sintassi che lo esegue.
MySQL Sintassi ALTER
Di seguito viene mostrata la sintassi di base utilizzata per aggiungere una colonna a una tabella già esistente.
ALTER TABLE `table_name` ADD COLUMN `column_name` `data_type`;
QUI
- “ALTERA TABELLA `nome_tabella`” è il comando che dice MySQL server per modificare la tabella denominata "nome_tabella".
- “AGGIUNGI COLONNA `nome_colonna` `tipo_dati`” è il comando che dice MySQL server per aggiungere una nuova colonna denominata `column_name` con il tipo di dati `data_type`.
Supponiamo che Myflix abbia introdotto la fatturazione e i pagamenti online. Per supportarli, è necessario aggiungere un campo per il numero di carta di credito alla tabella degli abbonati. Prima di apportare qualsiasi modifica, è opportuno esaminare la struttura attuale della tabella. Lo script mostrato di seguito esegue proprio questa operazione.
SHOW COLUMNS FROM `members`;
| Settore | Tipo | Nullo | Le | Predefinito | Extra |
|---|---|---|---|---|---|
| numero_iscrizione | int (11) | NO | PRI | NULL | Incremento automatico |
| nomi_completi | varchar (350) | NO | NULL | ||
| genere | varchar (6) | SI | NULL | ||
| data_di_nascita | quando | SI | NULL | ||
| indirizzo fisico | varchar (255) | SI | NULL | ||
| indirizzo_postale | varchar (255) | SI | NULL | ||
| numero di telefono | varchar (75) | SI | NULL | ||
| varchar (255) | SI | NULL |
💡 Nota su int(11): Il numero tra parentesi indica solo la larghezza dello schermo. MySQL 8.0.17 l'ha deprecato per i tipi interi, quindi un server moderno segnala questa colonna semplicemente come intLe dimensioni di archiviazione rimangono invariate.
Lo script mostrato di seguito aggiunge il nuovo campo alla tabella dei membri.
ALTER TABLE `members` ADD COLUMN `credit_card_number` VARCHAR(25);
L'esecuzione di questo script sul database myflixdb aggiunge una colonna denominata credit_card_number alla tabella members con tipo di dati VARCHAR. Eseguendo nuovamente lo script SHOW COLUMNS si ottiene il seguente risultato.
| Settore | Tipo | Nullo | Le | Predefinito | Extra |
|---|---|---|---|---|---|
| numero_iscrizione | int (11) | NO | PRI | NULL | Incremento automatico |
| nomi_completi | varchar (350) | NO | NULL | ||
| genere | varchar (6) | SI | NULL | ||
| data_di_nascita | quando | SI | NULL | ||
| indirizzo fisico | varchar (255) | SI | NULL | ||
| indirizzo_postale | varchar (255) | SI | NULL | ||
| numero di telefono | varchar (75) | SI | NULL | ||
| varchar (255) | SI | NULL | |||
| Numero di carta di credito | varchar (25) | SI | NULL |
La riga evidenziata conferma che credit_card_number è stato aggiunto alla tabella members e che i dati già presenti nelle altre colonne non sono stati modificati da tale aggiunta.
Aggiungere una colonna è solo metà del lavoro. Uno schema deve anche eliminare gli oggetti di cui non ha più bisogno, ed è questo il compito del comando DROP.
Che cos'è il comando DROP in MySQL?
Il comando DROP elimina un oggetto in modo permanente. Viene utilizzato per
- Elimina un database dal MySQL server.
- Eliminare un oggetto, come una tabella o una colonna, da un database.
⚠️ Attenzione: L'operazione DROP non è reversibile. Né l'oggetto né le righe al suo interno possono essere recuperati senza un backup, quindi esegui prima una SELECT sulla destinazione e conferma il backup.
Cadereping una colonna
Nell'esempio ALTER precedente, è stata aggiunta una colonna denominata credit_card_number alla tabella members. Supponiamo che la funzionalità di fatturazione online venga posticipata e che tale colonna debba essere rimossa. Lo script seguente esegue questa operazione.
ALTER TABLE `members` DROP COLUMN `credit_card_number`;
L'esecuzione dello script elimina la colonna credit_card_number dalla tabella members. Elencando nuovamente le colonne, il risultato viene confermato.
SHOW COLUMNS FROM `members`;
| Settore | Tipo | Nullo | Le | Predefinito | Extra |
|---|---|---|---|---|---|
| numero_iscrizione | int (11) | NO | PRI | NULL | Incremento automatico |
| nomi_completi | varchar (350) | NO | NULL | ||
| genere | varchar (6) | SI | NULL | ||
| data_di_nascita | quando | SI | NULL | ||
| indirizzo fisico | varchar (255) | SI | NULL | ||
| indirizzo_postale | varchar (255) | SI | NULL | ||
| numero di telefono | varchar (75) | SI | NULL | ||
| varchar (255) | SI | NULL |
Il numero della carta di credito è scomparso dall'elenco dei campi.
TABELLA DI GOCCIA
La sintassi per eliminare un'intera tabella da un database è la seguente.
DROP TABLE `sample_table`;
Applicata a un oggetto reale, l'affermazione si presenta così.
DROP TABLE `categories_archive`;
L'esecuzione di questo comando elimina dal database la tabella denominata `categories_archive` e tutte le righe in essa contenute.
DATABASE DI GOCCIA
La stessa parola chiave rimuove un intero schema. L'aggiunta di IF EXISTS sopprime l'errore che MySQL Si verifica un errore quando il target non è più presente, il che è utile all'interno di script che vengono eseguiti più di una volta.
DROP DATABASE IF EXISTS `myflixdb_backup`;
La rimozione di un oggetto è definitiva. Quando l'oggetto stesso deve rimanere e solo il suo nome è errato, il comando RENAME è lo strumento corretto.
Che cos'è il comando RENAME in MySQL?
Il comando RENAME modifica il nome di un oggetto di database esistente, come una tabella o una colonna, assegnandogli un nuovo nome. Rinominare una tabella non comporta la perdita dei dati in essa contenuti.
Il comando ha la seguente sintassi di base.
RENAME TABLE `current_table_name` TO `new_table_name`;
Per rinominare la tabella movierentals in movie_rentals, si utilizza lo script seguente.
RENAME TABLE `movierentals` TO `movie_rentals`;
L'esecuzione di questo comando rinomina la tabella `movierentals` in `movie_rentals`. Poiché la ridenominazione consiste solo in una modifica dell'etichetta, la stessa istruzione, se invertita, ripristina il nome originale.
RENAME TABLE `movie_rentals` TO `movierentals`;
RENAME TABLE gestisce il nome di una tabella. Rinominare una tabella colonna, e cambiare ciò che contiene, è compito della parola chiave CHANGE.
CAMBIARE Parola chiave
La parola chiave CHANGE consente di
- Modificare il nome di una colonna
- Modifica il tipo di dati della colonna
- Modifica i vincoli di colonna
Consideriamo un esempio. Il campo full_names nella tabella members è di tipo varchar con una larghezza di 350, come confermato dallo script seguente.
SHOW COLUMNS FROM `members`;
| Settore | Tipo | Nullo | Le | Predefinito | Extra |
|---|---|---|---|---|---|
| numero_iscrizione | int (11) | NO | PRI | NULL | Incremento automatico |
| nomi_completi | varchar (350) | NO | NULL | ||
| genere | varchar (6) | SI | NULL | ||
| data_di_nascita | quando | SI | NULL | ||
| indirizzo fisico | varchar (255) | SI | NULL | ||
| indirizzo_postale | varchar (255) | SI | NULL | ||
| numero di telefono | varchar (75) | SI | NULL | ||
| varchar (255) | SI | NULL |
Supponiamo che il requisito sia quello di
- Modifica il nome del campo da "full_names" a "fullname".
- Convertilo nel tipo di dati char con una larghezza di 250
- Aggiungi un vincolo NOT NULL
Tutte e tre le modifiche vengono eseguite tramite un'unica istruzione CHANGE.
ALTER TABLE `members` CHANGE COLUMN `full_names` `fullname` char(250) NOT NULL;
Eseguendolo su myflixdb e quindi eseguendo lo script SHOW COLUMNS si ottiene il seguente risultato.
| Settore | Tipo | Nullo | Le | Predefinito | Extra |
|---|---|---|---|---|---|
| numero_iscrizione | int (11) | NO | PRI | NULL | Incremento automatico |
| nome e cognome | char (250) | NO | NULL | ||
| genere | varchar (6) | SI | NULL | ||
| data_di_nascita | quando | SI | NULL | ||
| indirizzo fisico | varchar (255) | SI | NULL | ||
| indirizzo_postale | varchar (255) | SI | NULL | ||
| numero di telefono | varchar (75) | SI | NULL | ||
| varchar (255) | SI | NULL |
La colonna ora si chiama fullname, contiene caratteri (250) e rifiuta i valori NULL.
MODIFICA Parola chiave
La parola chiave MODIFY consente di
- Modifica il tipo di dati della colonna
- Modifica i vincoli di colonna
Nell'esempio CHANGE riportato sopra, il nome del campo doveva essere specificato due volte, anche se la ridenominazione era solo una parte dell'obiettivo. Omettere il nome del campo da un'istruzione CHANGE genera un errore. Quando è necessario modificare solo il tipo di dati e i vincoli, mentre il nome deve rimanere invariato, l'istruzione MODIFY risolve il problema con una sola menzione della colonna.
Lo script seguente modifica la larghezza del campo "fullname" da 250 a 50.
ALTER TABLE `members` MODIFY `fullname` char(50) NOT NULL;
Eseguendo il codice su myflixdb e quindi avviando lo script SHOW COLUMNS si ottiene il risultato mostrato di seguito.
| Settore | Tipo | Nullo | Le | Predefinito | Extra |
|---|---|---|---|---|---|
| numero_iscrizione | int (11) | NO | PRI | NULL | Incremento automatico |
| nome e cognome | char (50) | NO | NULL | ||
| genere | varchar (6) | SI | NULL | ||
| data_di_nascita | quando | SI | NULL | ||
| indirizzo fisico | varchar (255) | SI | NULL | ||
| indirizzo_postale | varchar (255) | SI | NULL | ||
| numero di telefono | varchar (75) | SI | NULL | ||
| varchar (255) | SI | NULL |
⚠️ Attenzione: restringere una colonna tronca i dati che non ci stanno più. Qualsiasi nome più lungo di 50 caratteri viene troncato da questa istruzione, quindi controlla il valore esistente più lungo con un SELEZIONA interrogare prima di ridurre un campo.
COLONNA CAMBIA vs MODIFICA vs RINOMINA
Le tre parole chiave si sovrappongono e la scelta di quella sbagliata è la causa più comune di errori in questo ambito. La tabella seguente le mette a confronto.
| Parola chiave | Rinomina la colonna | Modifica il tipo e i vincoli | Nome precedente richiesto | Utilizzo tipico |
|---|---|---|---|---|
| CAMBIAMENTO | Si | Si | Sì, più il nuovo nome | Rinominare e ridefinire in un'unica istruzione |
| MODIFICARE | Non | Si | Nome dato una volta | Allarga, restringi o riscrivi una colonna |
| RINOMINARE LA COLONNA | Si | Non | Sì, più il nuovo nome | Rinominare soltanto, da MySQL 8.0 in poi |
MySQL La versione 8.0 ha aggiunto una quarta opzione per il caso più semplice: una ridenominazione senza alcuna ridefinizione.
ALTER TABLE `members` RENAME COLUMN `fullname` TO `full_name`;
Il tipo e il nome sono stati definiti. La questione rimanente è dove posizionare la nuova colonna nella tabella, operazione che viene controllata dalla parola chiave AFTER.
DOPO Parola chiave
Per impostazione predefinita, una colonna aggiunta con ALTER TABLE viene posizionata alla fine della tabella. Per posizionarla invece in una posizione specifica, il comando ALTER viene combinato con la parola chiave AFTER.
Lo script seguente aggiunge "date_of_registration" subito dopo "date_of_birth" nella tabella dei membri.
ALTER TABLE `members` ADD `date_of_registration` date NULL AFTER `date_of_birth`;
Eseguendo il codice su myflixdb e quindi avviando lo script SHOW COLUMNS si ottiene il risultato mostrato di seguito.
| Settore | Tipo | Nullo | Le | Predefinito | Extra |
|---|---|---|---|---|---|
| numero_iscrizione | int (11) | NO | PRI | NULL | Incremento automatico |
| nome e cognome | char (50) | NO | NULL | ||
| genere | varchar (6) | SI | NULL | ||
| data_di_nascita | quando | SI | NULL | ||
| data_di_registrazione | quando | SI | NULL | ||
| indirizzo fisico | varchar (255) | SI | NULL | ||
| indirizzo_postale | varchar (255) | SI | NULL | ||
| numero di telefono | varchar (75) | SI | NULL | ||
| varchar (255) | SI | NULL |
La riga evidenziata è la colonna aggiunta dopo date_of_birth. La parola chiave FIRST funziona allo stesso modo e sposta la nuova colonna all'inizio della tabella.
