MYSQL加鎖的測驗
儲存引擎 支援的鎖定級別
myisam 表級別
memory 表級別
inndb 行級別
bdb:頁級別
lock鎖定型別
鎖定方式 目的
讀鎖 自己與其他執行緒只能讀取該表
寫鎖 只有當前執行緒能夠對錶進行寫入操作(其他執行緒也無法讀這部分資料)
讀鎖的英文叫法是shared locks,shared是共享的意思,共享鎖,就是所有使用者都可以共享進行讀(包括加鎖的使用者),不能寫。
寫鎖的英文叫法是Exclusive Locks,Exclusive是獨有、排外的意思
糾正一下:以前理解錯誤了。加了排他鎖定,其他事務是無法讀取資料的。網上的資料比較零散。
最近看了jim Gray那本《事務處理概念與技術》,裡面提到排他鎖時:保留對該節點寫的權利,防止其他事務在該節點及其後代節點加{x,u,s,six,is,ix}鎖。
提到的s就是共享鎖了,既然防止其他事務加s鎖,那麼其他執行緒是無法讀的(所有執行緒獲取資料之前必須先申請鎖才能操作)。文章下面加的試驗也會證明了這點。
ps:看來總結也好,加深了理解,如果不總結,也不會發現細節理解偏差。
測試一:測驗讀鎖
執行一個讀鎖:“lock table `cat` READ”
然後嘗試使用update語句操作 :
update `cat` set remark= 'ceshi'
報錯如下:
Table 'a' was locked with a READ lock and can't be updated
現在解鎖(針對當前執行緒鎖定的所有表解鎖):"unlock tables"
然後再次執行update語句,報錯消失。完成更新操作。說明已經解除讀鎖了(可以進行更新)
測驗二:測驗寫鎖
1、 我在一個客戶端SQLyog中執行一個寫鎖sql:LOCK TABLE cat WRITE;
2、另外開一個客戶端(執行緒),嘗試執行更新:
update `cat` set remark= 'jgjgjg'
情況:因為使用了寫鎖,只有自己能夠修改資料,其他執行緒無法執行update操作,此時伺服器端的php程式一直等待資料庫給予響應結果,資料被鎖定了,根本沒法執行sql語句,處於等待中,資料庫並不會報錯,因為這本來就是一個很正常的情況,需要等待釋放鎖才能執行update操作,其實大併發環境下就是這種情況(很多使用者同時在執行sql操作,有的加了寫鎖定),於是速度就慢下來了。
結果phpmyadmin一直處於等待中,等待伺服器給予客戶端(瀏覽器)資料,截圖如下:
經驗:使用phpmyadmin無法模擬出一個執行緒的情況。因為每次php執行完畢後,與資料庫的連線就會自動斷開(php指令碼特性)。
而SQLyog這樣的工具能夠保持連線不斷掉。所以,測驗寫鎖的時候完全可以使用同一個工具測驗出來。
增加測驗:測驗加寫鎖後,其他事務無法讀資料的情況
同樣也是在SQLyog這樣的工具中執行:LOCK TABLE cat WRITE
因為加了x鎖後,其他事務是無法獲得s鎖,所以根本無法讀資料。phpmyadmin這邊查詢這個表,都是等待狀態。
相關推薦
MYSQL加鎖的測驗
儲存引擎 支援的鎖定級別 myisam 表級別 memory 表級別 inndb 行級別 bdb:頁級別 lock鎖定型別 鎖定方式 目的 讀鎖 自己與其他執行緒只能讀取該表
MySQL 加鎖處理分析
insert 了解 med 做了 mit 不變 最簡 唯一性 b+ 背景 MySQL/InnoDB的加鎖分析,一直是一個比較困難的話題。我在工作過程中,經常會有同事咨詢這方面的問題。同時,微博上也經常會收到MySQL鎖相關的私信,讓我幫助解決一些死鎖的問題。
(轉)MySQL 加鎖處理分析
新的 不存在 ood for set ble b+ 行鎖 version MySQL 加鎖處理分析 原文:http://hedengcheng.com/?p=771 1 背景 1 1.1 MVCC:Snapshot Read vs Current R
Mysql加鎖過程詳解
插入記錄 控制 uniq null 詳細 server 讀者 index 理論知識 1、背景 MySQL/InnoDB的加鎖分析,一直是一個比較困難的話題。我在工作過程中,經常會有同事咨詢這方面的問題。同時,微博上也經常會收到MySQL鎖相關的私信,讓我幫助解決一些死
Mysql加鎖過程詳解(4)-select for update/lock in share mode 對事務並發性影響
per inno targe 允許 evel transacti 修改 not null warn select for update/lock in share mode 對事務並發性影響 事務並發性理解 事務並發性,粗略的理解就是單位時間內能夠執行的事務數量,常見的單
Mysql加鎖過程詳解(9)-innodb下的記錄鎖,間隙鎖,next-key鎖
ans 唯一索引 crazy cimage -h insert tran 存在 gin Mysql加鎖過程詳解(1)-基本知識 Mysql加鎖過程詳解(2)-關於mysql 幻讀理解 Mysql加鎖過程詳解(3)-關於mysql 幻讀理解 Mysql加鎖過程詳解(4)-
Mysql加鎖與實踐
1. 鎖分類 innodb中的鎖分為S鎖,即共享鎖,另一種為X鎖,排它鎖,比如: 共享鎖(S) select * from supplier where id=5 lock in share mode; 複製程式碼 排他鎖(X) select * from supplier where id=5 fo
mysql 加鎖分析與實踐
一序 本文分為兩個部分,第一部分主要基於何登成大神的文章。何博士作為阿里資料庫核心團隊大神。文章更是深入淺出。膜拜一下:原文地址如下 http://hedengcheng.com/?p=771 第二部分介紹常見的實踐注意事項。 二 背景 MVCC
mysql加鎖分析
分析場景 1.1 工具:mysql5.5.53,在windows開啟兩個mysql命令列,m1、m2、m3,m1執行更新、刪除操作,m2查詢,m3查詢事務 1.2 表結構:兩個欄位,一個id,一個price 1.3 刪除SQL:delete from t1 w
[InnoDB]Mysql加鎖情況
一、innodb七種鎖 共享/排他鎖(Shared and Exclusive Locks) 1.共享鎖(Shared Locks,S鎖) 2.排他鎖(Exclusive Locks,X鎖) 可以一起讀,讀寫/寫寫互斥。 意向鎖(Intention Locks) 1.意向
MySQL加鎖分析(總結分析各種情況)
參考:MySQL 加鎖處理分析。該文已經講的很詳盡了,也易懂,下面僅僅是個人做的總結。一、 背景1.1 隔離級別1.2 加鎖過程 逐條處理,逐條加鎖。1.3 兩階段鎖2PL1.4 gap鎖 gap鎖是間隙鎖,即相鄰兩條有效記錄間隙的鎖(鎖的是間隙),它是針對insert的,用來解決幻讀的發生。它會阻塞in
MySQL加鎖處理分析
1背景 1 5總結 16 背景 MySQL/InnoDB的加鎖分析,一直是一個比較困難的話題。我在工作過程中,經常會有同事諮詢這方面的問題。同時,微博上也經常會收到MySQL鎖相關的私信,讓我幫助解決一些死鎖的問題。本文
mysql 加鎖 解鎖 頁錶行鎖
頁級的典型代表引擎為BDB。 表級的典型代表引擎為MyISAM,MEMORY以及很久以前的ISAM。 行級的典型代表引擎為INNODB。 -我們實際應用中用的最多的就是行鎖。 行級鎖的優點如下: 1)
【轉】MySQL 加鎖處理分析
背景 MySQL/InnoDB的加鎖分析,一直是一個比較困難的話題。我在工作過程中,經常會有同事諮詢這方面的問題。同時,微博上也經常會收到MySQL鎖相關的私信,讓我幫助解決一些死鎖的問題。本文,準備就MySQL/InnoDB的加鎖問題,展開較為深入的分析與討
MySQL 加鎖處理分析(轉)
轉自:何登成部落格:http://hedengcheng.com/?p=771 背景 MySQL/InnoDB的加鎖分析,一直是一個比較困難的話題。我在工作過程中,經常會有同事諮詢這方面的問題。同時,微博上也經常會收到MySQL鎖相關的私信,讓我幫助解決一些
MySQL 加鎖和死鎖解析
目錄 產生死鎖的必要條件 鎖是加在那裡的? 操作與加鎖的對照關係 Insert Delete Update GAP鎖 什麼時候加next-key
MySQL數據庫事務各隔離級別加鎖情況--read committed && MVCC(轉)
釋放 什麽 表空間 版本 read 存儲引擎 extern 不同 重新 本文轉自https://m.imooc.com/article/details?article_id=17290 感謝作者 上篇記錄了我對MySQL 事務 隔離級別read uncommitted
MySQL系列之二四種隔離級別及加鎖
死鎖 開啟 serial 串行化 工作 保存 city innodb sele 事務 1、定義:所有操作必須成功完成,否則在每個操作中所作的所有更改都會備撤銷。 2、事務的ACID 原子性atomicity 一致性consistency 隔離性isola
MySQL的並發控制與加鎖分析
開啟 bubuko 最新版本 行數據 我們 控制 刪除 阻塞 一致性 本文主要是針對MySQL/InnoDB的並發控制和加鎖技術做一個比較深入的剖析,並且對其中涉及到的重要的概念,如多版本並發控制(MVCC),臟讀(dirty read),幻讀(phantom read),
【轉】【MySQL】MySQL的併發控制與加鎖分析
https://www.cnblogs.com/yelbosh/p/5813865.html 本文主要是針對MySQL/InnoDB的併發控制和加鎖技術做一個比較深入的剖析,並且對其中涉及到的重要的概念,如多版本併發控制(MVCC),髒讀(dirty read),幻讀(phantom read