一、鎖表解鎖
#查詢是否鎖表 SHOW OPEN TABLES WHERE IN_USE>0; #查詢行程 SHOW PROCESSLIST #殺死行程(一般到這一步就解鎖了) KILL ID; #查看正運行的事務 SELECT * FROM INFORMATION_SCHEMA.INNODB_TRX;; #查看正在鎖的事務 SELECT * FROM INFORMATION_SCHEMA.INNODB_LOCKS; #查看等待鎖的事務 SELECT * FROM INFORMATION_SCHEMA.INNODB_LOCK_WAITS; #解鎖表 UNLOCK TABLES;
二、加行鎖
2.1、創建行鎖條件
1)表中創建索引,SELECT ... WHERE 欄位(必須是索引,否則行鎖無效),
注:InnoDB的行鎖是針對索引加的鎖,不是針對記錄加的鎖,并且該索引不能失效,否則都會從行鎖升級為表鎖,
2、必須要有事務,這樣才是行鎖(排他鎖),
3、在SELECT陳述句后面加上FOR UPDATE,
2.2、示例
#加事務 START TRANSACTION; #加鎖 SELECT * FROM EMP WHERE ID<=10 FOR UPDATE; #決議 EXPLAIN SELECT * FROM EMP WHERE ID<=10 FOR UPDATE; #睡眠 SELECT SLEEP(3); #提交 COMMIT; #加事務 START TRANSACTION; #加鎖 SELECT * FROM EMP WHERE ID BETWEEN 11 AND 20 FOR UPDATE; #決議 EXPLAIN SELECT * FROM EMP WHERE ID BETWEEN 11 AND 20 FOR UPDATE; #提交 COMMIT;
推薦博文:MySQL 表鎖和行鎖機制
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/7282.html
標籤:MySQL
上一篇:滴滴AR實景導航背后的技術
