天天看點

資料庫的四種事務隔離級别

 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。)