問題:
為交城等地區(qū)用戶提供了全套網(wǎng)頁設(shè)計制作服務(wù),及交城網(wǎng)站建設(shè)行業(yè)解決方案。主營業(yè)務(wù)為網(wǎng)站建設(shè)、網(wǎng)站設(shè)計、交城網(wǎng)站設(shè)計,以傳統(tǒng)方式定制建設(shè)網(wǎng)站,并提供域名空間備案等一條龍服務(wù),秉承以專業(yè)、用心的態(tài)度為用戶提供真誠的服務(wù)。我們深信只要達(dá)到每一位用戶的要求,就會得到認(rèn)可,從而選擇與我們長期合作。這樣,我們也可以走得更遠(yuǎn)!
我們知道在MySQL中如果要執(zhí)行ALTER TABLE操作,MySQL會通過制作原來表的一個臨時副本來工作。對于表結(jié)構(gòu)的修改在副本上施行,然后將新表替換原始表,此時會產(chǎn)生鎖表,用戶可以從原始表讀取數(shù)據(jù),而用戶的更新和寫入操作都會被lock,待新表準(zhǔn)備好后寫入新表。
由于在這個過程中會鎖表。造成當(dāng)前操作的表無法寫入數(shù)據(jù),影響用戶使用。由于需要復(fù)制原表的數(shù)據(jù)到中間表,所以表的數(shù)據(jù)量越大,等待的時候越長,卡死在那里(用戶被拒絕執(zhí)行update和insert操作,表現(xiàn)就是延遲了一直在等待)。
解決方式:
我們這里借助影子拷貝的思想利用mysql load data 與 select into outfile手動導(dǎo)數(shù)據(jù):
導(dǎo)出語法:
導(dǎo)入語法:
原表結(jié)構(gòu):
目標(biāo)表結(jié)構(gòu):
在mysql命令行執(zhí)行命令
這一步可能會報錯:
解決方式:
在/etc/my點吸煙 f配置文件中加入 secure-file-priv='' ,然后重啟mysql服務(wù)器, service mysqld restart
也有可能會報錯:
解決方式:
給mysql用戶加上/tmp/data目錄的rwx權(quán)限就可以啦
完成
修改mysql數(shù)據(jù)庫表的方法:使用“ALTER TABLE”語句,可以改變原有表的結(jié)構(gòu),例如增加字段或刪減字段、修改原有字段數(shù)據(jù)類型、重新命名字段或表、修改表字符集等;語法“ALTER TABLE 表名 [修改選項]”。
修改數(shù)據(jù)表的前提是數(shù)據(jù)庫中已經(jīng)存在該表。修改表指的是修改數(shù)據(jù)庫中已經(jīng)存在的數(shù)據(jù)表的結(jié)構(gòu)。修改數(shù)據(jù)表的操作也是數(shù)據(jù)庫管理中必不可少的,就像畫素描一樣,畫多了可以用橡皮擦掉,畫少了可以用筆加上。
不了解如何修改數(shù)據(jù)表,就相當(dāng)于是我們只要畫錯了就要扔掉重畫,這樣就增加了不必要的成本。
在 MySQL 中可以使用?ALTER TABLE?語句來改變原有表的結(jié)構(gòu),例如增加或刪減列、更改原有列類型、重新命名列或表等。
有時候,會很不小心,在業(yè)務(wù)運行中執(zhí)行了一條鎖表語句。這時候該怎么辦?
例如:修改元數(shù)據(jù)。
SHOW FULL PROCESSLIST 查看一下:
發(fā)現(xiàn)修改之后,鎖表了。這時候怎么辦? 殺死它 KILL 4623660
然后一切又恢復(fù)正常了。
一般對于數(shù)據(jù)量較大的表,需要修改表結(jié)構(gòu),或者做一些耗時比較久的鎖表操作,建議在晚上(業(yè)務(wù)閑時)執(zhí)行。這個時候可以配合使用任務(wù)處理一下。
如:修改一個表的字段長度,和添加索引
名詞解釋:
接著回家睡覺,第二天回來檢查結(jié)果就好了。
附:添加唯一索引示例
MYSQL存儲過程結(jié)合任務(wù)處理耗時操作
工具/材料
Navicat For MySQL
01
打開Navicat for MySQL,找到一個數(shù)據(jù)庫,然后右鍵單擊表,選擇新建表選項,如下圖所示
02
在彈出的新建表界面,我們給表建一些字段,如下圖所示,建好之后保存即可
03
建好的表會在數(shù)據(jù)庫的右側(cè)界面顯示出來,需要查看哪個表直接選擇即可
04
下面我們在test數(shù)據(jù)庫中新建一個查詢,通過alter table語句修改表中的age字段不為空,如下圖所示