一、基本用法
1. 增加列
| alter table tbl_name add col_name type |
例如, 給pet的表增加一列 weight,
| mysql>alter table pet add weight int; |
2. 刪除列
| alter table tbl_name drop col_name |
例如, 刪除pet表中的weight這一列
| mysql>alter table pet drop weight; |
3. 改變列
分為改變列的屬性和改變列的名字
改變列的屬性——方法1:
| alter table tbl_name modify col_name type |
例如,改變weight的類型
| mysql>alter table pet modify weight varchar(30); |
改變列的屬性——方法2:
| alter table tbl_name change old_col_name col_name type |
例如,改變weight的類型
| alter table pet change weight weight varchar(30); |
改變列的名字:
| alter table tbl_name change old_col_name col_name |
例如改變pet表中weight的名字:
| mysql>alter table pet change weight wei; |
4. 改變表的名字
| alter table tbl_name rename new_tbl |
例如, 把pet表更名為animal
| mysql>alter table pet rename animal; |
二、對ALTER TABLE的優化
在系統的日常維護中,經常需要對表結構進行更新,例如添加/刪除一個字段,改變一個VARCHAR的字段長度等等。MySQL針對這種修改表結構的處理方式是先創建一張新的結構的表,接著會通過執行Insert語句將舊表的內容插入到新表中,最后刪除整張舊表。這種處理方式在數據量比較小的時候,不會有什么問題,可是當數據量很大的時候可能需要很多時間來處理該過程。
執行一個更新表結構的操作花費了幾個小時的時間,這是無法忍受的。如果你用的是5.1之前的版本的話,還會在執行表結構更新是數據庫往往是停止服務的,幸好在最新的版本中這個問題得到了改善
如果在進行表結構更新的時候你采用了恰當的方法,也并不是所有的更新操作會占用你很久的時間。
例如 你想更新用戶表的默認密碼為“666666”,通常采用的做法是
| mysql> ALTER TABLE user -> MODIFY COLUMN pwd VARCHAR NOT NULL DEFAULT ‘666666'; |
通過SHOW STATUS你可以發現在執行這個操作的過程中進行了大量的Insert操作,當用戶的數量很大時 例如百萬,千萬條的數據時,必然會消耗很多的時間。
可是如果你采用下邊的方式來更新的話,時間會大大的縮短