MySQL基本概念 鎖(概念)

2021-09-29 01:51:46 字數 2371 閱讀 9587

《 mysql效能優化--鎖》首發橙寂部落格****此提示

介紹下對於mysql鎖機制的理解

從基本概念開始:

共享鎖的代號是s,是share的縮寫,共享鎖的鎖粒度是行或者元組(多個行)。乙個事務獲取了共享鎖之後,可以對鎖定範圍內的資料執行讀操作。

排它鎖的代號是x,是exclusive的縮寫,排它鎖的粒度與共享鎖相同,也是行或者元組。乙個事務獲取了排它鎖之後,可以對鎖定範圍內的資料執行寫操作。

假設有兩個事務t1和t2

如果事務t1獲取了乙個元組的共享鎖,事務t2還可以立即獲取這個元組的共享鎖,但不能立即獲取這個元組的排它鎖(必須等到t1釋放共享鎖之後)。

如果事務t1獲取了乙個元組的排它鎖,事務t2不能立即獲取這個元組的共享鎖,也不能立即獲取這個元組的排它鎖(必須等到t1釋放排它鎖之後)

意向鎖是一種表鎖,鎖定的粒度是整張表,分為意向共享鎖(is)和意向排它鎖(ix)兩類。意向共享鎖表示乙個事務有意對資料上共享鎖或者排它鎖。「有意」這兩個字表達的意思比較微妙,說的明白點就是指事務想幹這個事但還沒真去幹。舉例說明下意向共享鎖,比如乙個事務t執行了這樣乙個語句:select * from table lock in share model,如果這個語句執行成功,就對錶table上了乙個意向共享鎖。lock in share model就是說事務t1在接下來要執行的語句中要獲取s鎖。如果t1的select * from table lock in share model執行成功,那麼接下來t1應該可以暢通無阻的去執行只需要共享鎖的語句了。意向排它鎖的含義同理可知,上例中要獲取意向排它鎖,可以使用select * from table for update****

lock in share model 和 for update這兩個東西在資料率理論中還有個學名叫悲觀鎖,與悲觀鎖相對的當然還有樂觀鎖。大家可以看到各種鎖都是成雙成對出現的。關於悲觀鎖和樂觀鎖的問題暫且不表,下文再來詳述。

鎖和鎖之間的關係,要麼是相容的,要麼是互斥的。

鎖a和鎖b相容是指:操作同樣一組資料時,如果事務t1獲取了鎖a,另乙個事務t2還可以獲取鎖b;

鎖a和鎖b互斥是指:操作同樣一組資料時,如果事務t1獲取了鎖a,另乙個事務t2在t1釋放鎖a之前無法獲取鎖b。

上面提到的共享鎖、排它鎖、意向共享鎖、意向排它鎖相互之前都是有相容/互斥關係的,可以用乙個相容性矩陣表示(y表示相容,n表示不相容):

x    s    ix    is

x n n n n

s n y n y

ix n n y y

is n y y y

相容性矩陣為什麼是這個樣子的?

x和s的相互關係在上文中解釋過了,ix和is的相互關係全部是相容,這也很好理解,因為它們都只是「有意」,還處於yy階段,沒有真幹,所以是可以相容的;

剩下的就是x和ix,x和is, s和ix, s和is的關係了,我們可以由x和s的關係推導出這四組關係。

簡單的說:x和ix的=x和x的關係。為什麼呢?因為事務在獲取ix鎖後,接下來就有權利獲取x鎖。如果x和ix相容的話,就會出現兩個事務都獲取了x鎖的情況,這與我們已知的x與x互斥是矛盾的,所以x與ix只能是互斥關係。其餘的三組關係同理,可用同樣的方式推導出來。

對於 update、delete和insert語句,innodb會自動給涉及資料集加排他鎖(x);對於普通select語句,innodb不會加任何鎖; 事務可以通過顯式給記錄集加共享鎖或排他鎖。

一致性非阻塞讀

select… lock in share mode和select … for update的區別

索引記錄鎖

間隙鎖後碼鎖

各種語句對應的鎖型別

在有索引的情況下是以後碼鎖為基礎的行級鎖,在固定索引鍵查詢的情況下是索引記錄鎖,在沒有可用索引的情況下上公升到表鎖

有索引的情況:

select … from 一致性非阻塞讀,不上鎖。在serializable隔離級別下例外,在這個隔離級別下上共享後碼鎖

select … from … lock in share mode 共享後碼鎖

select … from … for update 排它後碼鎖

update … where 排它後碼鎖

delete from … where 排它後碼鎖

insert … 排它索引記錄鎖,如果發生鍵值唯一性衝突則轉成共享鎖

insert … on duplicate key update ,一直都是排它鎖

replace … 一直都是排它鎖

mysql鎖 innodb鎖的基本概念

參考 mysql核心 innodb儲存引擎 第九章 mysql 引擎特性 innodb 事務鎖系統簡介 mysql 引擎特性 innodb 鎖子系統 mysql 引擎分析 innodb行鎖分析 測試環境 mysql 5.6.43版本 基本概念 排他 更新或者刪除 共享 讀取 行級鎖 行鎖 排他x 共...

MySQL 基本概念

mysql 是最流行的開源資料庫系統,可執行於幾乎所有的作業系統平台。在 mysql 安裝 一文中詳解介紹了安裝步驟,並且安裝 phpmyadmin 來管理 mysql 資料庫系統。在安裝完 mysql 資料庫系統後,系統會預設建立乙個名為 test 的資料庫 database 我們也可以建立多個資...

MySQL基本概念

mysql資料庫連線 root host mysql u root p enter password 以上命令執行後,登入成功輸出結果如下 welcome to the mysql monitor.commands end with or g.your mysql connection id is ...