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中)
(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不適合作為寫為主的主表的引擎,因為新增寫鎖以後,其他的執行緒不能夠做任何的操作,大量的更新會使得查詢很難得到鎖,進而造成永遠阻塞。
MySQL MySQL鎖機制之讀鎖操作
1.引入 我們在之前的執行緒中,已經初步接觸到了鎖的一些相關的內容。那麼當時的我們使用售票為例子,列舉了在只剩一張票的時候電腦程式在實現購票中不加鎖出現的各種問題。當我們再執行緒中加了鎖以後,就可以保證計算機對這乙個資料的爭搶乙個有序的處理。那麼在mysql資料庫中。我們同樣需要學習資料庫的鎖機制來...
MySQL MySQL鎖機制之行鎖理論
1.引入 2.行鎖的特點 行鎖偏向於innodb儲存引擎,開銷大,加鎖慢 會出現死鎖 鎖定的粒度最小,發生鎖衝突的概率最小,併發度也最高。3.行鎖的乙個基本案例 1 建立測試資料庫表boys drop table if exists boys create table boys id int 11 ...
MySQL mysql中的鎖機制
mysql的鎖機制不同的儲存引擎支援不同的鎖機制,分為表級鎖 行級鎖 頁面鎖。myisam和memory儲存引擎採用的是表級鎖 table level locking bdb儲存引擎採用的是頁面鎖 page level locking 但也支援表級鎖 innodb儲存引擎既支援行級鎖 row lev...