讀這篇文章之前可以先了解一下mysql中innodb資料結構
事務隔離級別
髒讀不可重複讀
幻讀讀未提交(read-uncommitted)
可能可能
可能不可重複讀(read-committed)
不可能可能
可能可重複讀(repeatable-read)
不可能不可能
innodb不可能
序列化(serializable)
不可能不可能
不可能隔離級別到底如何實現?
1、表鎖、行鎖
2、innodb鎖型別
select
*from teachers where id=
1lock
inshare
mode
;commit
/rollback
delete
/update
/insert 預設加上x鎖 select
*from table_name where..
.for
update
commit
/rollback
意向鎖(is、ix)是innodb資料操作之前自動加的,不需要使用者干預,當事務想去進行鎖表時,可以先判斷意向鎖是否存在,存在時則可快速返回該錶不能 啟用表鎖innodb行鎖到底鎖了什麼1、髒讀問題同一條資料被事務a查詢,又被事務b修改資料,那麼防止事務a讀到事務b未提交的髒資料,我們就給事務b修改的資料加上排它鎖(x鎖):exclusive locks進行的鎖定,防止事務a出現髒讀。
2、不可重複讀問題
同一條資料需要被事務a多次查詢,其中又被事務b修改資料,那麼防止事務a在第二次讀取資料不一致,我們就給事務a讀取的資料加共享鎖(s鎖):shared locks進行的鎖定,防止事務a出現不可重複讀。
3、幻讀問題
當事務a需要多次查詢乙個範圍資料時,其範圍中又被事務b新增或者刪除資料,防止事務a在第二次讀取範圍資料不一致,我們就給事務a讀取的範圍資料加上臨鍵鎖 next-key,防止事務a出現幻讀。
1、死鎖介紹
2、死鎖的避免
Mysql中InnoDB引擎的鎖
鎖這種機制的作用 對共享資源併發訪問的管理,保證資料的完整性和一致性。在資料庫中,lock與latch都可以被稱為 鎖 但是兩者的含義是完全不同的。lock針對的物件是事務,它用來鎖定資料庫中的物件,如表 頁 行。一般lock的物件僅在事務commit或者rollback後進行釋放,並且lock是有...
mysql中InnoDB中的各種鎖
一種分類方式 行鎖 索引上鎖 表鎖 表上鎖 一種分類方式 共享鎖 以及獲取前先獲取意向共享鎖 lock in share model 排它鎖 以及獲取前先獲取意向排它鎖 for update 一種分類方式 該分類前提 命中索引 記錄鎖 單條行鎖 間隙鎖 無記錄時候的臨鍵鎖退化為間隙鎖 臨鍵鎖 查詢範...
mysql中innodb引擎的行鎖
一 資料庫引擎 mysql常用的資料庫引擎也就是myisam和innodb兩種,相比較起myisam而言innodb支援了事務 外來鍵等功能,具有更好的併發性支援,所以在大併發的情況的下我們一般選擇的是innodb來作為我們的資料庫儲存引擎,而myisam相較innodb的執行效能上會有更好的表現,...