一般狀況下,修改表的結構通常不會有太大問題,無非就是一個 alter table 操做,可是對於大表作 alter 操做是一個大問題,請小夥伴們慎重。mysql
mysql執行大部分修改表結構操做方法是建立一個空表,從舊錶查詢全部的數據插入,而後刪除舊錶。若是內存不足,或者表很大,並且還有不少索引的狀況下,可能須要花費數個小時,甚至數天才能完成。因此若是是操做線上數據庫,甚至會影響到服務的正常進行,操做必定要慎重。若有須要能夠查詢其餘方法操做進行。sql
在這裏,若是是修改列的默認值的話,是有一個小技巧的。列的默認值是在 .frm 文件中的,因此修改默認值是能夠直接修改這個文件而不用動到表自己的,可是mysql尚未採用這種優化方法,全部的 modify column 都將重建表。數據庫
一般狀況下,你們修改表的默認值是:優化
alter table 表名 modify column 字段 ...... default 值;索引
這樣操做的話,若是表裏面有10000條數據,你會發現,這個語句實際上是作了10000次的查詢和10000次的插入,也就是拷貝了整張表。但其實你只是想改一個列的默認值而已。內存
若是用 alter column 來操做的話,那將是很是快的:字符串
好比: alter table 表名 alter column 字段 set default 值;table
這裏你會發現只是一瞬間,也不會有多餘的查詢和插入。技巧
從上面的例子咱們看到,只修改表的 .frm 文件是很快的。可是mysql有時候會在沒有必要的時候也重建表,若是願意冒一些險,可讓mysql不重建表而作一些其餘類型的修改。固然必定要記得備份,由於這個須要本身承擔風險。方法
下面這些操做有可能不須要從新建表:
基本的技術就是爲想要的表結構建立一個新的 .frm 文件,而後替換掉以前已存在的表的 .frm 文件,像這樣:
注意:再次強調,記得備份。