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

Comando ALTER MySQL

当我们需要修改数据表名或者修改数据表字段时,就需要使用到 MySQL ALTER 命令。

在开始本章教程之前,让我们先创建一张表,表名为:testalter_tbl。

root@host# mysql -u root -p password;
Enter password:*******
mysql> use w3codebox;
Database changed
mysql> create table testalter_tbl
    -> (
    -> i INT,
    -> c CHAR(1)
    -> ;
Query OK, 0 rows affected (0.05 sec)
mysql> SHOW COLUMNS FROM testalter_tbl;
+-------+---------+------+-----+---------+-------+
| Field | Type    | Null | Key | Default | Extra |
+-------+---------+------+-----+---------+-------+
| i     | int(11) | YES  |     | NULL    |       |
| c     | char(1) | YES  |     | NULL    |       |
+-------+---------+------+-----+---------+-------+
2 rows in set (0.00 sec)

删除,添加或修改表字段

以下命令使用了 ALTER 命令及 DROP 子句来删除以上创建表的 i 字段:

mysql> ALTER TABLE testalter_tbl DROP i;

Se nella tabella rimane solo un campo, non è possibile eliminare il campo con DROP.

In MySQL, l'istruzione ADD viene usata per aggiungere colonne alla tabella, come nell'esempio seguente, viene aggiunto il campo i alla tabella testalter_tbl e viene definito il tipo di dati:

mysql> ALTER TABLE testalter_tbl ADD i INT;

Dopo aver eseguito il comando sopra, il campo i verrà aggiunto automaticamente alla fine dei campi della tabella.

mysql> SHOW COLUMNS FROM testalter_tbl;
+-------+---------+------+-----+---------+-------+
| Field | Type    | Null | Key | Default | Extra |
+-------+---------+------+-----+---------+-------+
| c     | char(1) | YES  |     | NULL    |       |
| i     | int(11) | YES  |     | NULL    |       |
+-------+---------+------+-----+---------+-------+
2 rows in set (0.00 sec)

Se devi specificare la posizione del nuovo campo, puoi usare i termini chiave FIRST (imposta come prima colonna) e AFTER nome_campo (imposta dopo un campo specifico).

Prova l'istruzione ALTER TABLE seguente, dopo aver eseguito con successo, usa SHOW COLUMNS per visualizzare le modifiche alla struttura della tabella:

ALTER TABLE testalter_tbl DROP i;
ALTER TABLE testalter_tbl ADD i INT FIRST;
ALTER TABLE testalter_tbl DROP i;
ALTER TABLE testalter_tbl ADD i INT AFTER c;

Le parole chiave FIRST e AFTER possono essere usate nelle clausole ADD e MODIFY, quindi se vuoi riorganizzare la posizione dei campi nella tabella, devi prima eliminare il campo esistente con DROP e poi aggiungere il nuovo campo con ADD e impostare la posizione.

Modifica del tipo e del nome del campo

Se devi modificare il tipo e il nome del campo, puoi usare la clausola MODIFY o CHANGE nell'istruzione ALTER.

Ad esempio, per modificare il tipo del campo c da CHAR(1) a CHAR(10), esegui il comando seguente:

mysql> ALTER TABLE testalter_tbl MODIFY c CHAR(10);

L'uso della clausola CHANGE comporta una grande differenza nella sintassi. Dopo la parola chiave CHANGE, seguita dal nome del campo da modificare, quindi specifica il nuovo nome del campo e il tipo.

mysql> ALTER TABLE testalter_tbl CHANGE i j BIGINT;

Se vuoi modificare il campo j da BIGINT a INT, l'istruzione SQL è la seguente:

mysql> ALTER TABLE testalter_tbl CHANGE j j INT;

L'impatto di ALTER TABLE sui valori nulli e predefiniti

Quando modifichi un campo, puoi specificare se includere il valore o impostare un valore predefinito.

Ecco un esempio in cui viene specificato che il campo j deve essere NOT NULL e ha un valore predefinito di 100 .

mysql> ALTER TABLE testalter_tbl 
    -> MODIFY j BIGINT NOT NULL DEFAULT 100;

Se non imposti un valore predefinito, MySQL imposterà automaticamente il campo come NULL.

Modificare il valore predefinito del campo

Puoi utilizzare ALTER per modificare il valore predefinito del campo, ecco un esempio:

mysql> ALTER TABLE testalter_tbl ALTER i SET DEFAULT 1000;
mysql> SHOW COLUMNS FROM testalter_tbl;
+-------+---------+------+-----+---------+-------+
| Field | Type    | Null | Key | Default | Extra |
+-------+---------+------+-----+---------+-------+
| c     | char(1) | YES  |     | NULL    |       |
| i     | int(11) | YES  |     | 1000    |       |
+-------+---------+------+-----+---------+-------+
2 rows in set (0.00 sec)

Puoi anche utilizzare il comando ALTER con la clausola DROP per rimuovere il valore predefinito del campo, come nell'esempio seguente:

mysql> ALTER TABLE testalter_tbl ALTER i DROP DEFAULT;
mysql> SHOW COLUMNS FROM testalter_tbl;
+-------+---------+------+-----+---------+-------+
| Field | Type    | Null | Key | Default | Extra |
+-------+---------+------+-----+---------+-------+
| c     | char(1) | YES  |     | NULL    |       |
| i     | int(11) | YES  |     | NULL    |       |
+-------+---------+------+-----+---------+-------+
2 rows in set (0.00 sec)
Modificare il tipo di tabella:

Per modificare il tipo di tabella, puoi utilizzare il comando ALTER con la clausola TYPE. Ecco un esempio: modificheremo il tipo della tabella testalter_tbl in MYISAM:

Attenzione:Puoi utilizzare la frase SHOW TABLE STATUS per visualizzare il tipo di tabella.

mysql> ALTER TABLE testalter_tbl ENGINE = MYISAM;
mysql>  SHOW TABLE STATUS LIKE 'testalter_tbl'\G
*************************** 1. row ****************
           Name: testalter_tbl
           Type: MyISAM
     Row_format: Fixed
           Rows: 0
 Avg_row_length: 0
    Data_length: 0
Max_data_length: 25769803775
   Index_length: 1024
      Data_free: 0
 Auto_increment: NULL
    Create_time: 2007-06-03 08:04:36
    Update_time: 2007-06-03 08:04:36
     Check_time: NULL
 Opzioni di creazione:
        Commento:
1 row in set (0.00 sec)

Modifica del nome della tabella

Se necessario modificare il nome della tabella dei dati, è possibile utilizzare la clause RENAME dell'istruzione ALTER TABLE per farlo.

Prova l'esempio seguente per rinominare la tabella di dati testalter_tbl in alter_tbl:

mysql> ALTER TABLE testalter_tbl RENAME TO alter_tbl;

Il comando ALTER può anche essere utilizzato per creare e eliminare gli indici delle tabelle MySQL, questa funzione sarà introdotta nei prossimi capitoli.