1. 程式人生 > >Mysql列操作 增加列、刪除列、修改列、調整列順序 sql hacks

Mysql列操作 增加列、刪除列、修改列、調整列順序 sql hacks

之前在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