1. 程式人生 > Mysql入門教學 >14 ALTER 命令修改表

14 ALTER 命令修改表

前面小節介紹瞭如何新建表、設計表,本小節介紹如何對已經建好的資料表進行修改,其中包括對欄位的修改和表名稱的修改。在實際工作中,有時候原來設計的表可能不太合理,例如:使用者名稱欄位原本設計的只有 10 個字元的長度,但是有很多的使用者希望開放使用者名稱長度限制,這個時候就需要我們對錶進行修改操作,讓資料表更加合理。我們從以下幾個角度來看下如何修改資料表:

  • 修改資料表名稱;
  • 檢視建表的 SQL 語句;
  • 修改表字段資料型別;
  • 新增、修改、刪除表字段;

1. 修改資料表名稱

修改表名稱命令很簡單:

命令 : ALTER TABLE 舊的表名 RENAME TO 新的表名;

我們使用這條命令將 item_name

資料庫中的 student 表修改成 new_student,執行結果如下圖:
圖片描述

2. 檢視建表 sql 語句

修改表字段型別命令 :

 命令 : SHOW CREATE table_name;

執行結果如下圖:
圖片描述

如上圖所示 “new_student” 為表名,建表語句為:

CREATE TABLE `new_student` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `name` varchar(50) NOT NULL DEFAULT '無名',
  `age` int(10) unsigned NOT NULL DEFAULT
'0', `id_number` varchar(18) NOT NULL DEFAULT '', PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;

Tips:其中 “student” 為表名稱,“id”、“name”、“age”、"id_number"為欄位名稱,跟在欄位名稱後面的是欄位的資料型別,“UNSIGNED” 表示無符號,"AUTO_INCREMENT"表示自增,"PRIMARY KEY (`id`)"表示設定 “id” 為業務主鍵,"NOT NULL DEFAULT ‘無名’“表示預設不為空。且預設值為"無名”。

3. 修改表字段資料型別

修改表字段資料型別命令,以上面 “new_student” 表的 “name” 欄位為例,varchar 型別修改為 char型別 :

ALTER TABLE `new_student` 
MODIFY COLUMN `name` char(50) CHARACTER 
SET utf8 COLLATE utf8_general_ci 
NOT NULL DEFAULT '無名' AFTER `id`;

其中 “CHARACTER SET utf8 COLLATE utf8_general_ci” 為新欄位型別的字符集和編排方式,預設值為 “無名”,"AFTER id" 表示跟在 id 欄位後面。

執行結果如下圖 :

圖片描述

Tips:參照上面修改命令格式,將 name 欄位資料型別改為 int 命令:
ALTER TABLE new_student MODIFY COLUMN name int(10) NOT NULL DEFAULT '無名' AFTER id;。

4. 新增表字段

新增資料表的欄位命令,以新增性別欄位為例:

 ALTER TABLE `new_student` 
ADD COLUMN `sex` tinyint(2) UNSIGNED NOT NULL DEFAULT 1 COMMENT '性別 : 1:男 2:女' AFTER `id_number`;

執行結果如下圖:

圖片描述

Tips:其中COMMENT '性別 : 1:男 2:女' 表示該欄位的註釋說明;。

5. 刪除表字段

刪除表字段命令如下,以刪除上面性別欄位為例 :

ALTER TABLE `new_student` 
DROP COLUMN `sex`;

執行結果如下圖:

圖片描述

6. 修改表字段名稱

修改表字段資料型別命令,以 name 欄位改為 new_name 為例:

ALTER TABLE `new_student` 
CHANGE COLUMN `name` `new_name` char(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '無名' AFTER `id`;

執行結果如下圖:

圖片描述

7. 修改表字段預設值

修改表字段預設值命令,以修改 new_name 欄位預設值為例 :

ALTER TABLE `new_student` 
MODIFY COLUMN `new_name` char(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '小花' AFTER `id`;

執行結果如下圖:

圖片描述

8.小結

本小節介紹瞭如何修改表字段名稱、修改欄位資料型別、刪除表字段、修改表字段名稱、修改表字段預設值,需要注意的是,ALTER TABLE 操作的效能對於大表來說會存在問題,因此在實際生產環境中,ALTER TABLE 操作需要謹慎,MySQL 執行大部分修改表結構的方法是用新的結構建立一個空白表,從表彙總查出所有資料插入新表,這樣操作對於大資料量的表來說可能需要花費很長時間,所以操作大表之前需要謹慎一些。