MySQL_寫鎖_lock tables tableName write


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表的增刪改查操作不受影響 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM