MySQL學習筆記十二:鎖表解鎖與加行鎖

1、鎖表解鎖

#查詢是否鎖表
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、加行鎖

2.一、建立行鎖條件

1)表中建立索引,SELECT ... WHERE 字段(必須是索引,不然行鎖無效)。spa

注:InnoDB的行鎖是針對索引加的鎖,不是針對記錄加的鎖,而且該索引不能失效,不然都會從行鎖升級爲表鎖。.net

二、必需要有事務,這樣纔是行鎖(排他鎖)。code

三、在SELECT語句後面加上FOR UPDATE。blog

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 表鎖和行鎖機制索引

相關文章
相關標籤/搜索