pre.環境准備
1.建立兩個表S,T,並插入一些數據
1 --創建表S 2 create table S(d int) engine=innodb; 3 insert into S values (3); 4 5 --創建表T 6 create table T(c int) engine=innodb; 7 insert into S values (10);
2.打開兩個客戶端連接
一.寫鎖
1.對鎖定表進行查看,修改
在session1中對t表加write鎖,查看此時session1和session2對t表的讀寫情況。
可以看到,由於session1對t表加了write鎖,所以session1可以對t表進行增刪改查操作,session2對t表進行查詢操作則會陷入阻塞狀態,除非session1執行"unlock tables"解鎖操作,或者session1關閉客戶端連接。
這里session1執行“unlock tables”操作,就關閉連接了。
我在截圖中用的是“lock tables t read”,因為我忽然發現,session1先是對t進行write鎖,然后進行read鎖,就會釋放原先加的write鎖,從而加上read鎖,這樣session2也能進行select
可以看到,在session1解鎖瞬間(這里截圖用的是加read鎖,解鎖也是一樣效果,對於select來說),session2的select語句就得以執行。
同理,如果在session1執行“lock tables t write”,再在session2執行delete或者insert或者update也會陷入阻塞狀態,這里就不做演示了。
2.對非鎖定表進行查看,修改
在session1中對t表加write鎖,查看此時session1和session2對s表的讀寫情況。
可以看到,由於session1中對t表加了write鎖,session1對於s表無法進行增刪改查的操作,但是session2對於s表的增刪改查操作不受影響