一去件、執(zhí)行的ALTER語句
ALTER TABLE order_info
ADD COLUMN `flag` int(11) default 0 not null comment '0-不急 1--急';
假設(shè)這個(gè)表數(shù)量比較大,有一千萬數(shù)據(jù)扰路,同時(shí)你又有業(yè)務(wù)場景對(duì)它增刪改查尤溜,肯定會(huì)鎖表的。鎖表了你們業(yè)務(wù)就會(huì)異常汗唱,肯定就會(huì)報(bào)警
二宫莱、解決鎖表問題
定位mysql內(nèi),執(zhí)行你加字段語句的進(jìn)程id
SELECT * FROM INFORMATION_SCHEMA.PROCESSLIST WHERE DB = '你的數(shù)據(jù)庫名' and INFO LIKE '%你的表名%';
拿到id
kill id
三哩罪、如何預(yù)防
最好有專門的sql執(zhí)行平臺(tái)和維護(hù)人員授霸,比如Yearning,可以防止這類問題發(fā)生际插。
如果沒有這些條件碘耳,又必須要加字段,執(zhí)行的時(shí)候加上onlineDDL關(guān)鍵字框弛,
ALTER TABLE order_info
algorithm = inplace,
lock = none,
ADD COLUMN `flag` int(11) default 0 not null comment '0-不急 1--急';
lock = none辛辨,表示在執(zhí)行ALTER TABLE語句期間不對(duì)表進(jìn)行鎖定,允許其他會(huì)話對(duì)表進(jìn)行讀寫操作。這種方式可以提高并發(fā)性斗搞,但可能會(huì)導(dǎo)致數(shù)據(jù)不一致的情況指攒。
algorithm = inplace,明確指示 MySQL 嘗試在原地修改表結(jié)構(gòu)僻焚。這意味著 MySQL 將嘗試盡可能在不重新創(chuàng)建整個(gè)表的情況下應(yīng)用修改
這樣執(zhí)行效率會(huì)高很多允悦。而且不會(huì)鎖表。