MySQL InnoDB事務和鎖

2021-09-25 02:21:09 字數 1122 閱讀 4045

innodb中的事務遵循了acid原則 

read uncommit:最鬆散的級別

read commit:可解決髒讀問題

rc級別下:

repeatable read:mysql預設的級別,可解決幻讀問題

serializabale:最嚴格的級別,基於鎖序列執行事務

輸出中transactions一節有鎖的資訊。

檢視鎖的使用概況

1. shared and exclusive locks

如果事務t1持有了行a的共享鎖,那麼其它的事務都可以持有行a的共享鎖並讀取行a。但如果有事務此時要獲取行a的排它鎖,則事務會被掛起,直到其它事務釋放了行a的共享鎖。

如果事務t1持有了行a的排它鎖,其餘事務無論申請的是行a的共享鎖抑或排它鎖,都需要等待t1釋放排它鎖。

2. intention locks

意圖鎖有如下協議在乙個事務獲取表t中的某行的s鎖之前,事務必須事先獲取到了表t的is鎖或ix鎖

3. record locks

對於二級索引,除了會鎖住二級索引上的記錄外,也會在主鍵索引上加上記錄鎖

4. gap locks

5. next-key locks

6. insert intention locks

7. auto-inc locks

當update sql被發給mysql後,mysql server會根據where條件,發起一次locking read,讀取第一條滿足條件的記錄

innodb對第一條滿足條件的記錄加鎖,並返回給mysql server

mysql server收到這條加鎖的記錄之後,會再發起乙個update請求,更新這條記錄

一條記錄操作完成,再讀取下一條記錄,直至沒有滿足條件的記錄為止

如何盡可能避免死鎖:

參考自:

MySQL InnoDB事務隔離級別和鎖機制

擴充套件 在sqlserver資料庫中,並不使用索引組織表,而是使用一種稱為堆表的表型別。因此對於sqlserver來說,書籤是乙個行識別符號,用類似 檔案號 頁號 槽號 的格式來定位行資料。共享鎖 s lock 允許事務讀一行資料。排它鎖 x lock 允許事務刪除或更新一行資料。x sx不相容不...

MySQL InnoDB的事務隔離與鎖

關於索引結構,前面有一篇文章 mysql索引原理總結 mvcc mysql innodb儲存引擎,實現的是基於多版本的併發控制協議 mvcc multi version concurrency control 讀不加鎖,讀寫不衝突。與mvcc相對的,是基於鎖的併發控制,lock based conc...

MySQL InnoDB事務模型

事務的acid特性 原子性 一致性 隔離性 永續性。這部分不多說了,任何一本講資料庫理論的書籍裡邊都會有講。mysql innodb通過鎖來實現事務的一致性和隔離性,共實現了四種事務隔離級別 read uncommitted讀取未提交 某個session中的事務可以看到其他session的事務中尚未...