MySQL 的 4 種隔離級別,你了解麼?

2022-09-22 02:51:10 字數 1410 閱讀 2701

1、什麼是事務

事務是應用程式中一系列嚴密的操作,所有操作必須成功完成,否則在每個操作中所作的所有更改都會被撤消。也就是事務具有原子性,乙個事務中的一系列的操作要麼全部成功,要麼乙個都不做。事務的結束有兩種,當事務中的所以步驟全部成功執行時,事務提交。如果其中乙個步驟失敗,將發生回滾操作,撤消撤消之前到事務開始時的所以操作。

2、事務的 acid

事務具有四個特徵:原子性( atomicity )、一致性( consistency )、隔離性( isolation )和持續性( durability )。這四個特性簡稱為 acid 特性。

3、mysql的四種隔離級別

sql標準定義了4類隔離級別,包括了一些具體規則,用來限定事務內外的哪些改變是可見的,哪些是不可見的。低階別的隔離級數一般支援更高的併發處理,並擁有更低的系統開銷。

(1) read uncommitted(讀取未提交內容)

在該隔離級別,所有事務都可以看到其他未提交事務的執行結果。本隔離級別很少用於實際應用,因為它的效能也不比其他級別好多少。讀取未提交的資料,也被稱之為髒讀(dirty read)。

這是大多數資料庫系統的預設隔離級別(但不是mysql預設的)。它滿足了隔離的簡單定義:乙個事務只能看見已經提交事務所做的改變。這種隔離級別 也支援所謂的不可重複讀(nonrepeatable read),因為同一事務的其他例項在該例項處理其間可能會有新的commit,所以同一select可能返回不同結果。

這是mysql的預設事務隔離級別,它確保同一事務的多個例項在併發讀取資料時,會看到同樣的資料行。不過理論上,這會導致另乙個棘手的問題:幻讀 (phantom read)。簡單的說,幻讀指當使用者讀取某一範圍的資料行時,另乙個事務又在該範圍內插入了新行,當使用者再讀取該範圍的資料行時,會發現有新的「幻影」 行。innodb和falcon儲存引擎通過多版本併發控制(mvcc,multiversion concurrency control)機制解決了該問題。

這是最高的隔離級別,它通過強制事務排序,使之不可能相互衝突,從而解決幻讀問題。簡言之,它是在每個讀的資料行上加上共享鎖。在這個級別,可能導致大量的超時現象和鎖競爭。這四種隔離級別採取不同的鎖型別來實現,若讀取的是同乙個資料的話,就容易發生問題。例如:

在mysql中,實現了這四種隔離級別,分別有可能產生問題如下所示:

推薦部落格:(1)mysql的四種事務隔離級別

(2)詳細介紹四種隔離級別(秒懂)

Mysql事物的4種隔離級別11

mysql事物的4種隔離級別 sql標準定義了4種隔離級別,包括了一些具體規則,用來限定事務內外的哪些改變是可見的,哪些是不可見的。低階別的隔離級一般支援更高的併發處理,並擁有更低的系統開銷。首先,我們使用 test 資料庫,新建 tx 表,並且如圖所示開啟兩個視窗來操作同乙個資料庫 第1級別 re...

mysql 4種事務隔離級別驗證

1.建表 create table test id int 11 not null auto increment,name varchar 255 default null,primary key id engine innodb auto increment 6 default charset u...

《mysql基礎》4 隔離級別

mysql的innodb引擎支援事務,那麼事務之間也有可見性的問題,當我們開啟事務 提交事務的時候,我們想保證acid屬性,a 原子性 c 一致性 i 隔離性 d 永續性 隔離性的主要指標就是隔離級別,即事務之間的可見性的管控 隔離級別的分類 1 讀未提交 a事務可以讀取b事務未提交的變更,如b s...