MySql 修改表結構時 ALTER,MODIFY,CHANGE的區別
阿新 • • 發佈:2019-06-05
根據MySql文件,我們知道在修改表內某一列的屬性的時候,MySql支援3中語法結構:
ALTER [ONLINE|OFFLINE] [IGNORE] TABLE tbl_name
ALTER [COLUMN] col_name {SET DEFAULT literal | DROP DEFAULT}
ALTER [ONLINE|OFFLINE] [IGNORE] TABLE tbl_name
CHANGE [COLUMN] old_col_name new_col_name column_definition [FIRST|AFTER col_name]
ALTER [ONLINE|OFFLINE] [IGNORE] TABLE tbl_name MODIFY [COLUMN] col_name column_definition [FIRST | AFTER col_name]
這裡比較一下這三種語法的不同之處,以及什麼情況下應該選用什麼語法
語法 | 功能 | 說明 |
---|---|---|
ALTER | 只能更改列的預設值 | |
CHANGE | 可以重新命名列或者修改列的定義 | 標準SQL的擴充套件 |
MODIFY | 可以更改列的定義,但不能更改列的名稱 | 相容Oracle的擴充套件 |
通過文件介紹的功能,我們就基本能夠判斷處該使用使用哪種語法,CHANGE功能最強大,什麼情況下都可以使用(達到預期的效果)。但是還有一個區別:
- ALTER 語法只是修改 .frm 檔案,不會去更新表中的資料;
- MODIFY和CHANGE在更新表結構的時候重新插入表中的資料,因此比較耗費時間。
所以,當只需要修改某一列的預設值的時候,優先選擇用ALTER,需要修改列的名稱用CHANGE,只修改列的定義用MIODIFY
如果修改的列上有索引,修改完後最好重建一