建表
create table
mylock(
idint (11) not null auto_increment,
namevarchar (20) default null, primary key (
id`)
);insert into mylock (id,name) values (1, 『a』);
insert into mylock (id,name) values (2, 『b』);
insert into mylock (id,name) values (3, 『c』);
insert into mylock (id,name) values (4, 『d』);`
read鎖
session1
lock table mylock read 給表加讀鎖 (1)
select * from mylock 查詢表資料,正常 (2)
update mylock set name = 『e』 where id = 1 無法進行操作 (4)
unlock tables 釋放鎖 (6)
update mylock set name = 『e』 where id = 1 無法進行操作 (7)正常更新
session2
select * from mylock 查詢表資料,正常 (3)
update mylock set name = 『e』 where id = 1 無法進行操作 (5)
update mylock set name = 『e』 where id = 1 正常更新(8)
write鎖
session1
lock table mylock write 給表加寫鎖 (1)
select * from mylock where id = 1 查詢正常操作 (2)
update mylock set name = 『f』 where id = 1 更新正常操作 (4)
unlock tables 釋放鎖 (6)
session2
select * from mylock where id = 2 無法進行操作 (需要換成不同的id,mysql自帶了快取) (3)
update mylock set name = 『f』 where id = 2 無法進行操作 (5)
select * from mylock where id = 2 查詢正常操作 (7)
update mylock set name = 『f』 where id = 1 更新正常操作 (8)
總結表共享讀鎖,顧名思義,讀取資料session都能select,鎖不釋放的情況下,表沒法進行更新和新增。
表獨佔寫鎖,佔據鎖的session可以對錶進行 update,insert,select操作。鎖不釋放的情況下,其他session沒法進行表進行操作。
Mysql鎖機制與併發控制
鎖是計算機協調多個程序或純執行緒併發訪問某一資源的機制。在資料庫中,除傳統的計算資源 cpu ram i o 的爭用以外,資料也是一種供許多使用者共享的資源。如何保證資料併發訪問的一致性 有效性是所在有資料庫必須解決的乙個問題,鎖衝突也是影響資料庫併發訪問效能的乙個重要因素。從這個角度來說,鎖對資料...
mysql 併發控制 mysql併發控制
mysql併發控制 當有多個查詢需要同時修改同乙個資料,就會產生併發控制的問題。mysql可以在兩個層面進行併發控制 伺服器層和儲存引擎層。mysql通過加鎖實現併發控制 鎖有兩類 讀鎖 共享鎖,即乙個讀鎖不會阻塞其它讀鎖,多個使用者可同時讀取同乙個資源,而不互相干擾。寫鎖 排他鎖,即乙個寫鎖會阻塞...
MySQL併發控制之讀寫鎖和鎖粒度詳解
無論何時,只要有多個查詢需要在同一時刻修改資料,都會產生併發控制的問題。本章的目的是討論mysql在兩個層面的併發控制 伺服器層與儲存引擎層。併發控制是 乙個內容龐大的話題,有大量的理 獻對其進行過詳細的論述。本章只簡要地討論 mysql如何控制併發讀寫,因此讀者需要有相關的知識來理解本章接下來的內...