程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> InnoDB:Lock & Transaction,innodblock

InnoDB:Lock & Transaction,innodblock

編輯:MySQL綜合教程

InnoDB:Lock & Transaction,innodblock


InnoDB 是一個支持事務的Engine,要保證事務ACID,必然會用到Lock。就像在Java編程一下,要保證數據的線程安全性,必然會用到Lock。了解Lock,Transaction可以幫助sql優化、deadlock分析等。

  • 1、Lock
    • 1.1 Shared Lock & Exclusive Lock
    • 1.2 Intention Lock
    • 1.3 Index Record Lock
    • 1.4 Gap Lock
    • 1.5 Next-Key Lock
  • 2、Transaction
    • 2.1 事務過程中可能出現的問題
    • 2.2 ACID
    • 2.3 MVCC
    • 2.4 現階段鎖(2PL)管理
    • 2.5 隔離級別
    • 2.6 SQL 加鎖分析
  • 3、DeadLock

 

1、Lock

InnoDB中,有多種類別的鎖,下面將一一說明。

1.1 Shared Lock & Exclusive Lock

共享鎖(S)與排他鎖(X),這兩個鎖是row-level的鎖,也就是說,可以理解為,每一行記錄都有一把S,一把X鎖。共享鎖是讀鎖(Read Lock),事務執行時,如果要讀取一行數據,就要先持有該行數據的讀鎖(S)。排他鎖是寫鎖(Write Lock),事務執行時,如果要寫數據(即更新數據, 例如update, delete),則要先持有相應的行的寫鎖(X)。

    此外,Read Lock可以同時被多個事務(實際上是執行這多個事務的線程)持有,Write Lock則不能。這一點,從設計上來講,和java中的ReadLock WriteLock是類似的。

也就是說ReadLock可以同時被多個線程持有,WriteLock只能被一個線程持有。

當一個線程A持有著ReadLock(S)時,線程B也可以持有ReadLock(S),但線程B不能去持有WriteLock(X)。同時線程A如果持有著ReadLock時,如果還想再去持有WriteLock,那麼必須等待其他的線程釋放ReadLock,並且沒有持有WriteLock。

    當一個線程A持有著WriteLock時,其他的線程不能去持有WriteLock或者ReadLock,但他自己(線程A)還是可以去讀取的,而不需要去持有ReadLock。

 

1.2 Intention Lock

意向鎖,想要做某事時的鎖,這是個表鎖。分為兩種:意向讀鎖(IS)、意向寫鎖(IX)。

如果你想要讀取某些行的記錄,必須得先持有表的IS鎖。想要修改、刪除某些行時,必須得先持有表的IX鎖。

   

 

 

X

IX

S

IS

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved