位置:首頁 > 數據庫 > MySQL教學 > MySQL Alter命令

MySQL Alter命令

當想改變表名,MySQL的ALTER命令非常有用, 在添加或刪除任何表字段到現有列在表中。

讓我們開始創建一個表為 testalter_tbl。

root@host# mysql -u root -p password;
Enter password:
mysql> use test;
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)

刪除,添加或重新定義列

假設想要從上麵MySQL的表中刪除一個現有列,那麼使用ALTER命令以及DROP子句如下:

mysql> ALTER TABLE testalter_tbl  DROP i;

如果在表中列是唯一的一個,那麼DROP將無法正常工作。

要添加列,使用ADD並指定列定義。下麵的語句將存儲到 i 列:testalter_tbl 

mysql> ALTER TABLE testalter_tbl ADD i INT;

發出這條語句後,testalter將包含當第一次創建表時的兩列, 但不會有完全一樣的結構。這是因為新的列被添加到表中時,默認排在最後一列。因此,即使 i 列原來是 mytbl 的第一列,但現在它是最後一列。

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)

若要指示列在表中的特定位置,要麼使用FIRST把它放在第一列或AFTER col_name 來指定新的列應放置col_name之後。 試試下麵的ALTER TABLE語句,使用 SHOW COLUMNS 看看有什麼影響:

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;

FIRST 和 AFTER 隻能在ADD子句中使用。這意味著,如果你想在表中重新排位現有列,首先必須刪除(DROP )它,然後在新的位置添加(ADD)它。

更改列定義或名稱

要改變列的定義,使用MODIFY 或CHANGE 子句以及ALTER命令。 例如, 要改變字段 c 從 CHAR(1) 修改為 CHAR(10), 那麼可以這樣做:

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

CHANGE語法可能有點不同。CHANGE關鍵字後的名稱是要修改的列,然後指定新的定義,其中包括新的名稱。試試下麵的例子:

mysql> ALTER TABLE testalter_tbl CHANGE i j BIGINT;

如果現在使用CHANGE轉換i列從BIGINT為INT,但不改變列名,該語句執行預期:

mysql> ALTER TABLE testalter_tbl CHANGE j j INT;

ALTER TABLE影響Null和缺省值屬性

當使用 MODIFY 或 CHANGE修改列,還可以指定該列是否能為NULL值以及它的默認值。事實上,如果你不這樣做,MySQL也會自動分配這些屬性值。

下麵是一個例子,這裡 NOT NULL列將使用100作為默認值。

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

如果不使用上麵的命令,那麼MySQL將填補使用NULL 來填充所有列值。

更改列的默認值

可以使用ALTER命令更改任何列的默認值。嘗試下麵的例子。

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)

從任何一列刪除默認的約束,可以使用ALTER命令以及DROP子句。

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)

更改表類型

可以通過使用ALTER命令以及TYPE子句修改表的類型。試試下麵的例子,將 testalter_tbl 的類型更改為MyISAM 表類型。

若想要知道一個表的當前類型,那麼可使用 SHOW TABLE STATUS 語句。

mysql> ALTER TABLE testalter_tbl TYPE = 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: 2015-06-03 18:35:36
    Update_time: 2015-06-03 18:35:36
     Check_time: NULL
 Create_options:
        Comment:
1 row in set (0.00 sec)

重命名表

要重命名表,使用ALTER TABLE語句的RENAME選項。試試下麵的例子是用來重命名testalter_tbl為alter_tbl。

mysql> ALTER TABLE testalter_tbl RENAME TO alter_tbl;

可以使用ALTER命令來創建並在MySQL的文件刪除索引。我們將在下一章看到此功能。