Innodb引擎室mysql server中支援事務的存儲引擎之一,
自然也是支援四種事務隔離級别的
read uncommitted,
read commit,
repeatable read
serializable,
下面就分别最四種隔離級别在實作的鎖機制做一個簡介:
serializable:
1:這種隔離級别對資料的要求最為嚴格,自然也是性能最差的一種隔離級别。
在所有的select語句中都是預設加了一個lock in share mode的鎖,
2:在這種隔離級别中沒有一緻讀的,所有的select都将傳回最近的資料狀态。
3:由于這種隔離級别的對資料高度一緻的嚴格,是以會産生很多的鎖,自然也會導緻很多的死鎖,對性能的影響不言而喻。
repeatable read:
1:所有的select在第一次一緻讀以後在事務中都會使用一樣的資料狀态快照。
2:update,delete都會使用間隙鎖來保證資料的安全。防止phantom。
3:這是采用最廣的事務隔離級别,也是mysql預設的事務隔離級别。
read commited:
1:每一個select都會使用各自的資料狀态的快照。
2:如果目前的資料狀态已更新到最新,但是當當個select的時候仍然會産生不一緻的資料狀态。
3:更少的間隙鎖意味着更少的死鎖。
4:唯一key的檢查在第二索引和其它外鍵檢查的時候也會産生間隙所。(gap必須被鎖定以防止在parent row被删除後仍在child row中插入相關資料)。
5:這種隔離級别也是使用的非常普遍的隔離級别尤其是在5.1以後的版本中。
6:征對在5.0更早的版本中,可以通過innodb_locks_unsafe_for_binlog移除gap locking。
(In V5.1, most gap-locking is removed w/ this level, but you MUST use row-based logging/replication。)