1. 程式人生 > >MySql 修改表結構時 ALTER,MODIFY,CHANGE的區別

MySql 修改表結構時 ALTER,MODIFY,CHANGE的區別

根據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

如果修改的列上有索引,修改完後最好重建一