
- MySQLi 教程
- MySQLi - 首頁
- MySQLi - 簡介
- MySQLi - PHP 語法
- MySQLi - 連線
- MySQLi - 建立資料庫
- MySQLi - 刪除資料庫
- MySQLi - 選擇資料庫
- MySQLi - 建立表
- MySQLi - 刪除表
- MySQLi - INSERT 查詢
- MySQLi - SELECT 查詢
- MySQLi - WHERE 子句
- MySQLi - UPDATE 查詢
- MySQLi - DELETE 查詢
- MySQLi - LIKE 子句
- MySQLi - 排序結果
- MySQLi - 使用 JOIN
- MySQLi - 處理 NULL 值
- 獲取和使用 MySQLi 元資料
- MySQL
- MySQL - 安裝
- MySQL - 管理
- MySQL - 資料型別
- MySQL - 正則表示式
- MySQL - 事務
- MySQL - ALTER 命令
- MySQL - 索引
- MySQL - 臨時表
- MySQL - 克隆表
- MySQL - 使用序列
- MySQL - 處理重複資料
- MySQLi 有用資源
- MySQLi - 有用函式
- MySQLi - 快速指南
- MySQLi - 有用資源
- MySQLi - 討論
MySQLi - ALTER 命令
MySQL ALTER 命令在您想更改表名、任何表字段,或者想在表中新增或刪除現有列時非常有用。
讓我們從建立一個名為 tutorials_alter 的表開始。
root@host# mysql -u root -p password; Enter password:******* mysql> use TUTORIALS; Database changed mysql> create table tutorials_alter → ( → i INT, → c CHAR(1) → ); Query OK, 0 rows affected (0.27 sec) mysql> SHOW COLUMNS FROM tutorials_alter; +-------+---------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+---------+------+-----+---------+-------+ | i | int(11) | YES | | NULL | | | c | char(1) | YES | | NULL | | +-------+---------+------+-----+---------+-------+ 2 rows in set (0.02 sec)
刪除、新增或重新定位列
假設您想從上面的 MySQL 表中刪除現有列 i,那麼您將使用 DROP 子句以及 ALTER 命令,如下所示:
mysql> ALTER TABLE tutorials_alter DROP i;
如果列是表中僅剩的列,則 DROP 將不起作用。
要新增列,請使用 ADD 並指定列定義。以下語句將 i 列恢復到 tutorials_alter:
mysql> ALTER TABLE tutorials_alter ADD i INT;
發出此語句後,testalter 將包含與您第一次建立表時相同的兩列,但結構不會完全相同。這是因為新列預設新增到表的末尾。因此,即使 i 最初是 mytbl 的第一列,現在它是最後一列。
mysql> SHOW COLUMNS FROM tutorials_alter; +-------+---------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+---------+------+-----+---------+-------+ | c | char(1) | YES | | NULL | | | i | int(11) | YES | | NULL | | +-------+---------+------+-----+---------+-------+ 2 rows in set (0.01 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 tutorials_alter MODIFY c CHAR(10);
使用 CHANGE,語法略有不同。在 CHANGE 關鍵字之後,您命名要更改的列,然後指定新的定義,其中包括新名稱。試試下面的例子
mysql> ALTER TABLE tutorials_alter CHANGE i j BIGINT;
如果您現在使用 CHANGE 將 j 從 BIGINT 轉換回 INT 而無需更改列名,則語句將按預期執行:
mysql> ALTER TABLE tutorials_alter CHANGE j j INT;
ALTER TABLE 對 NULL 和預設值屬性的影響
當您修改或更改列時,您還可以指定列是否可以包含 NULL 值以及其預設值是什麼。事實上,如果您不這樣做,MySQL 會自動為這些屬性賦值。
這是一個示例,其中 NOT NULL 列的預設值為 100。
mysql> ALTER TABLE tutorials_alter → MODIFY j BIGINT NOT NULL DEFAULT 100;
如果您不使用上述命令,則 MySQL 將在所有列中填充 NULL 值。
更改列的預設值
您可以使用 ALTER 命令更改任何列的預設值。試試下面的例子。
mysql> ALTER TABLE tutorials_alter ALTER j SET DEFAULT 1000; mysql> SHOW COLUMNS FROM tutorials_alter; +-------+------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+------------+------+-----+---------+-------+ | c | char(10) | YES | | NULL | | | j | bigint(20) | NO | | 1000 | | +-------+------------+------+-----+---------+-------+ 2 rows in set (0.02 sec)
您可以使用 DROP 子句以及 ALTER 命令從任何列中刪除預設約束。
mysql> ALTER TABLE tutorials_alter ALTER j DROP DEFAULT; mysql> SHOW COLUMNS FROM tutorials_alter; +-------+------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+------------+------+-----+---------+-------+ | c | char(10) | YES | | NULL | | | j | bigint(20) | NO | | NULL | | +-------+------------+------+-----+---------+-------+ 2 rows in set (0.02 sec)
更改表型別
您可以使用 TYPE 子句以及 ALTER 命令使用表型別。
要找出表的當前型別,請使用 SHOW TABLE STATUS 語句。
mysql> SHOW TABLE STATUS LIKE 'tutorials_alter'\G *************************** 1. row *************************** Name: tutorials_alter Engine: InnoDB Version: 10 Row_format: Compact Rows: 0 Avg_row_length: 0 Data_length: 16384 Max_data_length: 0 Index_length: 0 Data_free: 0 Auto_increment: NULL Create_time: 2017-02-17 11:30:29 Update_time: NULL Check_time: NULL Collation: latin1_swedish_ci Checksum: NULL Create_options: Comment: 1 row in set (0.00 sec)
重命名錶
要重命名錶,請使用 ALTER TABLE 語句的 RENAME 選項。嘗試以下示例將 tutorials_alter 重新命名為 tutorials_bks。
mysql> ALTER TABLE tutorials_alter RENAME TO tutorials_bks;
您可以使用 ALTER 命令在 MySQL 檔案上建立和刪除索引。我們將在下一章中介紹此功能。