mysql會話鎖 Mysql鎖機制 寫鎖

2021-10-22 06:19:02 字數 2147 閱讀 4462

1 準備資料

1.1 建表

1.1.1 建立 employee表

drop table if existsemployee;create table if not existsemployee (

idint primary keyauto_increment,

namevarchar(40),

dept_idint)engine myisam;

1.1.2 建立 department 表

drop table if existsdepartment;create table if not existsdepartment (

idint primary keyauto_increment,

namevarchar(40)

)engine myisam;

1.1.3 注意:上述兩張表的儲存引擎都是 myisam

1.2 插入資料

insert into employee(name, dept_id) values('alice', 1);insert into employee(name, dept_id) values('bob', 1);

insert into department(name) values('rd');

2 測試

2.1 給 employee 表加上寫鎖

lock table employee write;

2.2 查詢 employee 表

2.2.1 當前會話(終端、命令列視窗)

注意:當前會話是指執行了上面的 lock table employee read 語句的會話(視窗、命令列);在我的例子中,是白色背景。

2.2.2 其它會話(終端、命令列視窗)

注意:新開乙個會話視窗;在我的例子中,是黑色背景。

查詢都會被阻塞(掛起)!

在『當前會話』中解除鎖定

解除鎖定後,『其它會話』才能正常查詢!

2.2.3 結論

可以看到,加了寫鎖後,當前會話可以查詢,但其它會話已經不能查詢了。

2.3 更新 employee 表

2.3.0 準備

重新給 employee 表加上寫鎖

lock table employee write;

2.3.1 當前會話

2.3.2 其它會話

還是被阻塞!

當前會話解除鎖定

解除鎖定後,才能更新

2.3.3 結論

可以看到,加了寫鎖後,當前會話可以更新(寫操作),其它會話的更新操作會被阻塞。

2.4 查詢其它表

2.4.0 準備

重新給 employee 表加上寫鎖

lock table employee write;

2.4.1 當前會話

select * from department;

2.4.2 其它會話

2.4.3 結論

加了寫鎖後,當前會話不能讀取其它表,其它會話可以正常讀取其它表。

3 結論

寫鎖,對於當前會話 (owner) 來說,可以讀取鎖住的表、也可以更新,但不能讀取其它表;

對於其它會話 (other) 來說,不可以讀取鎖住的表、更不可能更新(會被阻塞),但可以正常讀取其它表;

寫鎖是排它的

mysql 隱式鎖和顯示鎖 MySQL的鎖機制

2 解鎖階段 當事務釋放了乙個封鎖以後,事務進入解鎖階段,在該階段只能進行解鎖操作不能再進行加鎖操作。5 隱式和顯示鎖定 innodb會根據隔離級別在需要的時候自動加鎖,這稱為隱式加鎖。另外,innodb也支援通過特定的語句進行顯示加鎖 顯示加共享鎖 select lock in share mod...

mysql 查詢鎖 MySQL 鎖查詢

一 從檢視檢視 檢視程序 show processlist 檢視是否鎖表 show open tables where in use 0 1 檢視當前的事務 select from information schema.innodb trx 2 檢視當前鎖定的事務 select from infor...

mysql鎖機制 mysql 鎖機制

一 概述 mysql有三種鎖的級別 頁級 表級 行級。myisam和memory儲存引擎採用的是表級鎖 table level locking bdb儲存引擎採用的是頁面鎖 page level locking 但也支援表級鎖 innodb儲存引擎既支援行級鎖 row level locking 也...