1. 程式人生 > 實用技巧 >MySQL學習筆記十二:鎖表解鎖與加行鎖

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

一、鎖表解鎖

#查詢是否鎖表
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 表鎖和行鎖機制