MySQL_MySQL鎖機制之寫鎖操作

1.引入

   上一節課,我們呢,查看了在對一個表添加讀鎖,然後在不同的會話中查看對數據的不同操作,可以發現讀鎖在讀取的時候可以共享數據,寫的時候阻塞。那麼下面呢。我們就一起來看看添加寫鎖又會有什麼樣子的變化呢?

 

2.寫鎖案例講解

(1).數據庫表內容準備

DROP TABLE IF EXISTS `admin`;
CREATE TABLE `admin` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `username` varchar(10) NOT NULL,
  `password` varchar(10) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=myisam DEFAULT CHARSET=utf8;
 
 
 
//注意這一個數據表的引擎是myisam

添加數據內容並查看

(2).給數據庫表admin添加一個寫鎖(在會話1中)

lock table admin write;

(3).操作數據庫表內容

會話1中進行對加鎖數據表的讀取操作,發現可以讀取。

在會話1中進行對加鎖數據表修改操作,發現可以進行操作。

在會話1中去讀取其他數據表的內容,發現不可以,因爲加鎖的數據庫表的棧沒有清除。

會話2讀取其他數據表內容,發現可以讀取。

會話2讀取加鎖數據庫表內容,發現處於阻塞狀態,然後在會話1中取消加鎖,立刻執行查詢操作。

會話2進行其他操作的時候都不能夠進行其他的操作。

 

3.總結

通過上面的操作,我們可以把讀鎖和寫鎖的操作總結如下:

        讀鎖會阻塞寫,但是不會堵塞讀取操作。寫鎖會把讀操作和寫操作都堵塞。

 

4.讀寫鎖的其他相關操作

(1).查看哪些被加了鎖

show open tables;

//有1的就是被加了鎖。

(2).如何分析表鎖定

可以通過檢查table_locks_waited 和table_locks_immediate狀態變量來分析系統上的表鎖定。

SQL:show status like 'table%';

由於我們的admin數據庫表使用是是Myisam引擎,那麼Myisam的讀寫調度是寫優先,這也就是Myisam不適合作爲寫爲主的主表的引擎,因爲添加寫鎖以後,其他的線程不能夠做任何的操作,大量的更新會使得查詢很難得到鎖,進而造成永遠阻塞

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章