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.

  • Comando ALTER: ALTER TABLE ridefinisce un oggetto già esistente, consentendo così a uno schema attivo di recepire nuovi requisiti senza doverlo ricostruire.
  • AGGIUNGI COLONNA: Il comando ALTER TABLE ADD COLUMN aggiunge un campo, e le righe esistenti mantengono tutti i valori che già contenevano.
  • 🗑️ Comando DROP: DROP elimina in modo permanente: un database, una tabella o una singola colonna tramite ALTER TABLE DROP COLUMN.
  • 🔁 Comando RENAME: RENAME TABLE modifica solo il nome di una tabella, senza perdere alcun dato al suo interno.
  • CAMBIAMENTO Parola chiave: L'istruzione CHANGE rinomina una colonna e ne ridefinisce il tipo e i vincoli in un'unica operazione, pertanto entrambi i nomi delle colonne sono obbligatori.
  • 🧩 MODIFICA Parola chiave: MODIFY modifica il tipo e i vincoli mantenendoping il nome, la scelta più sicura per una modifica solo tipografica.
  • 📍 DOPO Parola chiave: AFTER posiziona la colonna appena aggiunta in una posizione scelta anziché alla fine della tabella.

MySQL ALTER, ELIMINA, RINOMINA e MODIFICA

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
email 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
email 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

  1. Elimina un database dal MySQL server.
  2. 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
email 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

  1. Modificare il nome di una colonna
  2. Modifica il tipo di dati della colonna
  3. 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
email varchar (255) SI NULL

Supponiamo che il requisito sia quello di

  1. Modifica il nome del campo da "full_names" a "fullname".
  2. Convertilo nel tipo di dati char con una larghezza di 250
  3. 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
email 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

  1. Modifica il tipo di dati della colonna
  2. 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
email 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
email 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.

DOMANDE FREQUENTI

No. Le istruzioni DDL come ALTER, DROP e RENAME vengono eseguite implicitamente in MySQLPertanto, una transazione aperta non può annullarle. Il ripristino da un backup è l'unica soluzione.

Dipende dalla modifica. Molte modifiche a InnoDB vengono eseguite online e consentono letture e scritture simultanee, mentre altre copiano l'intera tabella e bloccano le scritture. Aggiungi le clausole ALGORITHM e LOCK per specificare cosa accetterai.

DROP rimuove l'oggetto stesso. TRUNCATE svuota una tabella ma ne mantiene la struttura. DELETE Rimuove le righe selezionate e può essere filtrato con una clausola WHERE.

Di solito sì. Gli assistenti IA integrati nei client come MySQL banco di lavoro trasformare una richiesta come "aggiungere una colonna di date nullable dopo date_of_birth" in una sintassi valida. RevPrima di eseguire il codice, confronta l'istruzione generata con lo schema attivo.

Solo in parte. Gli strumenti di revisione basati sull'IA segnalano i rischi evidenti, come una colonna eliminata ma ancora denominata in una query o un tipo ristretto che tronca i dati. Non possono analizzare ogni singola chiamata, quindi è comunque necessaria un'esecuzione di prova.

Riassumi questo post con: