ALTER 命令修改表
前面小節(jié)介紹了如何新建表、設(shè)計(jì)表,本小節(jié)介紹如何對已經(jīng)建好的數(shù)據(jù)表進(jìn)行修改,其中包括對字段的修改和表名稱的修改。在實(shí)際工作中,有時候原來設(shè)計(jì)的表可能不太合理,例如:用戶名字段原本設(shè)計(jì)的只有 10 個字符的長度,但是有很多的用戶希望開放用戶名長度限制,這個時候就需要我們對表進(jìn)行修改操作,讓數(shù)據(jù)表更加合理。我們從以下幾個角度來看下如何修改數(shù)據(jù)表:
- 修改數(shù)據(jù)表名稱;
- 查看建表的 SQL 語句;
- 修改表字段數(shù)據(jù)類型;
- 新增、修改、刪除表字段;
1. 修改數(shù)據(jù)表名稱
修改表名稱命令很簡單:
命令 : ALTER TABLE 舊的表名 RENAME TO 新的表名;
我們使用這條命令將 item_name
數(shù)據(jù)庫中的 student
表修改成 new_student
,執(zhí)行結(jié)果如下圖:
2. 查看建表 sql 語句
修改表字段類型命令 :
命令 : SHOW CREATE table_name;
執(zhí)行結(jié)果如下圖:
如上圖所示 “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"為字段名稱,跟在字段名稱后面的是字段的數(shù)據(jù)類型,“UNSIGNED” 表示無符號,"AUTO_INCREMENT"表示自增,"PRIMARY KEY (`id`)"表示設(shè)置 “id” 為業(yè)務(wù)主鍵,"NOT NULL DEFAULT ‘無名’“表示默認(rèn)不為空。且默認(rèn)值為"無名”。
3. 修改表字段數(shù)據(jù)類型
修改表字段數(shù)據(jù)類型命令,以上面 “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” 為新字段類型的字符集和編排方式,默認(rèn)值為 “無名”,"AFTER id
" 表示跟在 id 字段后面。
執(zhí)行結(jié)果如下圖 :
Tips:參照上面修改命令格式,將 name 字段數(shù)據(jù)類型改為 int 命令:
ALTER TABLE new_student MODIFY COLUMN name int(10) NOT NULL DEFAULT '無名' AFTER id
;。
4. 新增表字段
新增數(shù)據(jù)表的字段命令,以新增性別字段為例:
ALTER TABLE `new_student`
ADD COLUMN `sex` tinyint(2) UNSIGNED NOT NULL DEFAULT 1 COMMENT '性別 : 1:男 2:女' AFTER `id_number`;
執(zhí)行結(jié)果如下圖:
Tips:其中
COMMENT '性別 : 1:男 2:女'
表示該字段的注釋說明;。
5. 刪除表字段
刪除表字段命令如下,以刪除上面性別字段為例 :
ALTER TABLE `new_student`
DROP COLUMN `sex`;
執(zhí)行結(jié)果如下圖:
6. 修改表字段名稱
修改表字段數(shù)據(jù)類型命令,以 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`;
執(zhí)行結(jié)果如下圖:
7. 修改表字段默認(rèn)值
修改表字段默認(rèn)值命令,以修改 new_name 字段默認(rèn)值為例 :
ALTER TABLE `new_student`
MODIFY COLUMN `new_name` char(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '小花' AFTER `id`;
執(zhí)行結(jié)果如下圖:
8.小結(jié)
本小節(jié)介紹了如何修改表字段名稱、修改字段數(shù)據(jù)類型、刪除表字段、修改表字段名稱、修改表字段默認(rèn)值,需要注意的是,ALTER TABLE 操作的性能對于大表來說會存在問題,因此在實(shí)際生產(chǎn)環(huán)境中,ALTER TABLE 操作需要謹(jǐn)慎,MySQL 執(zhí)行大部分修改表結(jié)構(gòu)的方法是用新的結(jié)構(gòu)創(chuàng)建一個空白表,從表匯總查出所有數(shù)據(jù)插入新表,這樣操作對于大數(shù)據(jù)量的表來說可能需要花費(fèi)很長時間,所以操作大表之前需要謹(jǐn)慎一些。