English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Modifica della tabella SQL (istruzione ALTER TABLE)

In questo tutorial, imparerai come utilizzare SQL per modificare o modificare una tabella esistente.

Modificare una tabella esistente

Dopo aver creato la tabella, è probabile che, mentre inizierete a utilizzarla, scoprirete di aver dimenticato di creare le colonne o le restrizioni necessarie, o di aver specificato un nome errato per la colonna.

In questo caso, è possibile utilizzare l'istruzione ALTER TABLE per modificare o modificare una tabella esistente aggiungendo, modificando o eliminando colonne nella tabella.

Consideriamo noishippersIl database ha una tabella con la seguente struttura:

+--------------+-------------+------+-----+---------+----------------+
| Field                       | Type                               | Null         | Key           | Default                               | Extra                               |
+--------------+-------------+------+-----+---------+----------------+
| shipper_id                   | int                               | NO          | PRI          | NULL                               | auto_increment  |
| shipper_name                 | varchar(60) | NO      |               | NULL                                              |
| phone        | varchar(60) | NO   |     | NULL    |                |
+--------------+-------------+------+-----+---------+----------------+

Utilizzeremo questa tabella shippers per tutte le istruzioni ALTER TABLE.

Ora supponiamo di voler espandere la tabella shippers esistente aggiungendo una colonna. Ma, come possiamo farlo con l'istruzione SQL? Vediamolo.

Aggiungere una nuova colonna

 Sintassi di base per aggiungere una nuova colonna a una tabella esistente:

ALTER TABLE table_name ADD column_name data_type constraints;					

Le seguenti istruzioni aggiungono una nuova colonna fax alla tabella shippers.

ALTER TABLE shippers ADD fax VARCHAR(20);

Ora, dopo aver eseguito la seguente istruzione, se si utilizza il comando DESCRIBE shippers per vedere la struttura della tabella; Nel prompt dei comandi MySQL, come segue:

+--------------+-------------+------+-----+---------+----------------+
| Field                       | Type                               | Null         | Key           | Default                               | Extra                               |
+--------------+-------------+------+-----+---------+----------------+
| shipper_id                   | int                               | NO          | PRI          | NULL                               | auto_increment  |
| shipper_name                 | varchar(60) | NO      |               | NULL                                              |
| phone        | varchar(60) | NO   |     | NULL    |                |
| fax          | varchar(20) | YES  |     | NULL    |                |
+--------------+-------------+------+-----+---------+----------------+

Attenzione:Se si desidera aggiungere una colonna NOT NULL all'esistente tabella, è necessario specificare esplicitamenteValore predefinitoQuesta valore predefinito viene utilizzato per riempire la nuova colonna per ogni riga esistente nella tabella.

Suggerimento:Quando si aggiunge una nuova colonna alla tabella, se non è specificato NULL o NOT NULL, la colonna è considerata come specificata NULL.

MySQL aggiunge per default una nuova colonna alla fine. Tuttavia, se devi aggiungere una nuova colonna dopo una colonna specifica, puoi utilizzare la clause AFTER come segue:

mysql> ALTER TABLE shippers ADD fax VARCHAR(20) AFTER shipper_name;					

MySQL ha fornito una clause aggiuntiva, che puoi utilizzare per aggiungere una nuova colonna alla prima posizione della tabella. Basta sostituire la clause AFTER utilizzata nell'esempio precedente con FIRST per aggiungereshippersaggiungi la colonna fax all'inizio della tabella.

modifica la posizione della colonna

In MySQL, se hai già creato una tabella ma non sei soddisfatto della posizione delle colonne esistenti nella tabella, puoi modificare in qualsiasi momento utilizzando la seguente sintassi:

ALTER TABLE table_name
  MODIFY column_name column_definition AFTER column_name;			

La seguente istruzione aggiunge la colonnafaxmettereshippersnella tabellashipper_namedopo la colonna.

mysql> ALTER TABLE shippers MODIFY fax VARCHAR(20) AFTER shipper_name;					

aggiungi restrizione

Il nostro attuale tabella shippers ha un problema principale. Anche se inserisci un record con un numero di telefono duplicato, non ti blocca, questo non è buono, il numero di telefono dovrebbe essere unico.

Puoi aggiungere una restrizione tramitephoneaggiunge una restrizione UNIQUE alla colonna per risolvere questo problema. La sintassi di base per aggiungere una restrizione a una colonna esistente nella tabella è la seguente:

ALTER TABLE table_name ADD UNIQUE (column_name,...);					

La seguente istruzione UNIQUE aggiungephoneaggiunge una restrizione alla colonna.

mysql> ALTER TABLE shippers ADD UNIQUE (phone);					

Dopo aver eseguito questa istruzione, se si tenta di inserire un numero di telefono duplicato, si riceverà un messaggio di errore.

Allo stesso modo, se la tabella creata non ha PRIMARY KEY, può essere utilizzato il seguente contenuto:

ALTER TABLE table_name ADD PRIMARY KEY (column_name,...);					

se non è definita, la seguente istruzione:PRIMARY KEY aggiunge una restrizione ashipper_idLa colonna.

mysql> ALTER TABLE shippers ADD PRIMARY KEY (shipper_id);					

Elimina la colonna

La sintassi di base per eliminare una colonna da una tabella esistente:

ALTER TABLE table_name DROP COLUMN column_name;					

La seguente istruzioneshippersEliminare la colonna che abbiamo aggiunto nella tabellafaxLa colonna.

mysql> ALTER TABLE shippers DROP COLUMN fax;					

Ora, dopo aver eseguito la seguente istruzione, se vedi la struttura della tabella, dovrebbe apparire come segue:

+--------------+-------------+------+-----+---------+----------------+
| Field                       | Type                               | Null         | Key           | Default                               | Extra                               |
+--------------+-------------+------+-----+---------+----------------+
| shipper_id                   | int                               | NO          | PRI          | NULL                               | auto_increment  |
| shipper_name                 | varchar(60) | NO      |               | NULL                                              |
| phone                       | varchar(20) | NO      | UNI           | NULL                                              |
+--------------+-------------+------+-----+---------+----------------+

Modifica il tipo di dati della colonna

Puoi utilizzare la seguente clausola ALTER per modificare il tipo di dati della colonna in SQL Server:

ALTER TABLE table_name ALTER COLUMN column_name new_data_type;					

Ma il server di database MySQL non supporta la sintassi ALTER COLUMN. Supporta clausole alternative per modificare le colonne, come nel seguente esempio:

ALTER TABLE table_name MODIFY column_name new_data_type;					

La seguente istruzioneshippersnella tabellaphoneIl tipo di dati della colonna corrente è stato modificato da VARCHAR a CHAR, la lunghezza è stata modificata da 20 a 15.

mysql> ALTER TABLE shippers MODIFY phone CHAR(15);					

Analogamente, puoi utilizzare la clausola MODIFY per commutare se una colonna nella tabella MySQL accetta valori nulli, redefinendo la definizione esistente della colonna e aggiungendo infine la restrizione null o not null, come segue:

mysql> ALTER TABLE shippers MODIFY shipper_name CHAR(15) NOT NULL;					

Rinomina della tabella

Ecco la sintassi di base per rinominare una tabella esistente in MySQL:

ALTER TABLE current_table_name RENAME new_column_name;					

Le seguenti frasi renommeranno la nostrashippersRinomina della tabellashipper

mysql> ALTER TABLE shippers RENAME shipper;					

Puoi anche utilizzare la seguente frase RENAME TABLE per raggiungere lo stesso obiettivo in MySQL:

mysql> RENAME TABLE shippers TO shipper;