對于寫鎖定如下:
創(chuàng)新互聯(lián)專注于福鼎企業(yè)網(wǎng)站建設(shè),成都響應(yīng)式網(wǎng)站建設(shè)公司,購物商城網(wǎng)站建設(shè)。福鼎網(wǎng)站建設(shè)公司,為福鼎等地區(qū)提供建站服務(wù)。全流程按需求定制開發(fā),專業(yè)設(shè)計(jì),全程項(xiàng)目跟蹤,創(chuàng)新互聯(lián)專業(yè)和態(tài)度為您提供的服務(wù)
1)、如果表沒有加鎖,那么對其加寫鎖定。
2)、否則,那么把請求放入寫鎖隊(duì)列中。
對于讀鎖定如下:
1)、如果表沒有加寫鎖,那么加一個讀鎖。
2)、否則,那么把請求放到讀鎖隊(duì)列中。
當(dāng)然我們可以分別用low_priority 以及high_priority在寫和讀操作上來改變這些行為。
-- 查詢是否鎖表
show OPEN TABLES ;
-- 查詢進(jìn)程
show processlist ;
-- 查詢到相對應(yīng)的進(jìn)程,然后殺死進(jìn)程
kill id; -- 一般到這一步就解鎖了
-- 查看正在鎖的事務(wù)
SELECT * FROM INFORMATION_SCHEMA.INNODB_LOCKS;
-- 查看等待鎖的事務(wù)
SELECT * FROM INFORMATION_SCHEMA.INNODB_LOCK_WAITS;
-- 解鎖表
UNLOCK TABLES;
有時候,會很不小心,在業(yè)務(wù)運(yùn)行中執(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ù)處理耗時操作