170510 資料庫預設隔離級別

2022-03-09 19:48:06 字數 1402 閱讀 4670

db使用的隔離級別不僅影響資料庫的併發性,而且影響併發應用程式的效能。通常,使用的隔離級別越嚴格,併發性就越小,某些應用程式的效能可能會隨之越低,因為它們要等待資源上的鎖被釋放。

dirty read 髒讀

nonrepeatable read 不可重複讀

phantom read 幻讀

read uncommitted 未提交讀

possible

possible

possible

read committed 提交讀

not possible

possible

possible

repeatable read 可重複讀

not possible

not possible

possible

serializable 序列化

not possible

not possible

not possible

未提交讀隔離級別是最不嚴格的隔離級別,現實中應用很少。在使用這個隔離級別時,僅當另乙個事務試圖刪除或更改被檢索的行所在的表時,才會鎖定乙個事務檢索的行。因為在使用這種隔離級別時,行通常保持未鎖定狀態,所以髒讀、不可重複讀和幻像讀都可能會發生。

提交讀是oracle預設的隔離級別,事務中的每一條語句都遵從語句級的讀一致性,即乙個語句所處理的資料集是在單一時間點上的資料集,這個時間點是這個語句開始的時間,乙個語句看不見在它開始執行後提交的修改

可重複讀是mysql的預設隔離級別。在該隔離級別下,乙個事務的影響完全與其他併發事務隔離,髒讀、不可重複的讀、幻像讀現象都不會發生。當使用可重複讀隔離級別時,在事務執行期間會鎖定該事務以任何方式引用的所有行。因此,如果在同乙個事務中發出同乙個select語句兩次或更多次,那麼產生的結果資料集總是相同的。因此,使用可重複讀隔離級別的事務可以多次檢索同一行集,並對它們執行任意操作,直到提交或回滾操作終止該事務。。

序列化讀會使整個資料庫的併發效能大幅下降,僅僅能看見在本事務開始前由其它事務提交的更改和在本事務中所做的更改,接近於序列操作,現實中應用很少。

髒讀(dirty read):當乙個事務讀取另乙個事務尚未提交的修改時,產生髒讀。

非重複讀(nonrepeatable read:同一查詢在同一事務中多次進行,由於其他提交事務所做的修改或刪除,每次返回不同的結果集,此時發生非重複讀。

幻讀(phantom read:同一查詢在同一事務中多次進行,由於其他提交事務所做的插入操作,每次返回不同的結果集,此時發生幻像讀

資料庫隔離級別

read uncommited 讀未提交 最低級別,可讀取未提交事物的資料,這會導致髒讀,比如 某時刻會話a修改了乙個資料,但還未提交,此時會話b,讀取了該資料,這是,會話a回滾了事物,這就導致資料出現了不一致狀態,這就是髒讀 read commited 提交讀 避免了髒讀,但會導致不可重複讀,例如...

資料庫隔離級別

資料庫事務的隔離級別有4個,由低到高依次為read uncommitted read committed repeatable read serializable,這四個級別可以逐個解決髒讀 不可重複讀 幻讀這幾類問題。可能出現 不會出現 髒讀 不可重複讀 幻讀read uncommitted re...

資料庫隔離級別

資料庫事務的隔離級別有4個,由低到高依次為read uncommitted read committed repeatable read serializable,這四個級別可以逐個解決髒讀 不可重複讀 幻讀這幾類問題。可能出現 不會出現 髒讀不可重複讀 幻讀read uncommitted rea...