Mysql列操作 增加列、刪除列、修改列、調整列順序 sql hacks
阿新 • • 發佈:2019-01-07
之前在win7下用sqlyog客戶端操作mysql資料庫時有個功能“reorder column”(列順序調整)在表結構定義時被經常用到,後來在mac上使用navicat客戶端(可能版本不對)居然沒找到類似功能,所以只好寫sql語句來實現,順便總結下mysql 列操作相關的sql語法。
1、mysql5.7參考手冊 與列操作相關的sql語法
ALTER [IGNORE] TABLE tbl_name
| ADD [COLUMN] col_name column_definition [FIRST | AFTER col_name ]
| ADD [COLUMN] (col_name column_definition, ...)
| ALTER [COLUMN] col_name {SET DEFAULT literal | DROP DEFAULT}
| CHANGE [COLUMN] old_col_name new_col_name column_definition [FIRST|AFTER col_name]
| MODIFY [COLUMN] col_name column_definition[FIRST | AFTER col_name]
| DROP [COLUMN] col_name
準備一張表,所有操作基於該表:
CREATE TABLE `jdbc_student` (
`id` int(20) NOT NULL AUTO_INCREMENT,
`name` varchar(100) DEFAULT NULL,
`age` int(11) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
2、新增、刪除列
1)新增列:gendar
alter table jdbc_student add column gendar varchar(1) not null comment '性別' after age
在age列後面新增一列gendar,varchar(1),非空,註釋:性別
2)刪除列:gendar
alter table jdbc_student drop column gendar
3、修改列
修改列有2個關鍵字:change和modify
- alter table tbl change col col …
- alter table tbl modify col …
兩者區別:
- change 可以修改列名,若列名不變修改列其它屬性則需要多寫一次列名
- modify 不可以修改列名,較change可以少些一次列名,語法看書更簡潔
注意事項:
不管change還是modify,列原有屬性需要帶上,否則會丟失。
將上述新建的欄位:gendar 由varchar(1) 改成 char(1)
alter table jdbc_student change gendar gendar char(1) not null comment '性別'
alter table jdbc_student modify gendar char(1) not null comment '性別'
4、調整列順序
調整列順序實際上還是修改列,因其操作特殊性,單獨列出。
將上述新增的gendar欄位,放到age前面,sql如下:
--先通過change調到age前,name後
alter table jdbc_student change gendar gendar char(1) not null comment '性別' after name
--再通過modify調到age後
alter table jdbc_student modify gendar char(1) not null comment '性別' after age