1. 程式人生 > >MYSQL加鎖的測驗

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),

【轉】【MySQLMySQL的併發控制與分析

https://www.cnblogs.com/yelbosh/p/5813865.html  本文主要是針對MySQL/InnoDB的併發控制和加鎖技術做一個比較深入的剖析,並且對其中涉及到的重要的概念,如多版本併發控制(MVCC),髒讀(dirty read),幻讀(phantom read