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的事務中尚未...