資料庫事務和隔離級別

2021-10-04 16:58:08 字數 1560 閱讀 5351

1、事務是乙個邏輯單元內的一系列操作

2、事務分兩種:讀取事務(select)、修改事務(insert/update)

原子性(atomicity): 事務內的所有操作,要麼全部成功,要麼全部失敗回滾(不能對資料庫有任何影響);

一致性(consistency):事務前後,資料的完整性必須保持一致;

隔離性(isolation):併發訪問資料庫時,事務與事務之間隔離,不會互相影響;下面有隔離級別

永續性(durability):事務一旦被提交,則對資料庫中資料的改變是永久性的(宕機斷電不影響);

1、髒讀(寫-讀問題:乙個事務讀到了另乙個事務未提交的資料(可能是髒資料:這個資料有可能會回滾);

2、不可重複讀(讀-讀問題:乙個事務範圍內,對同乙個資料讀取多次,結果不一樣;

讀取間隔內資料被其他事務修改並提交,區別髒讀的是其他事務是否已提交改動

3、幻讀(讀-寫問題:事務先讀取了一批資料,然後另乙個事務又插入了新資料,導致結果跟預期不一致;

幻讀和不可重複讀都是讀取了另一條已經提交的事務(這點就髒讀不同),所不同的是不可重複讀查詢的都是同乙個資料項,而幻讀針對的是插入新資料的場景。

1、讀未提交(read uncommitted): 事務可以讀到其他事務未提交的資料。 三種問題都有;

2、讀已提交(read committed): 不能讀其他事務沒提交的資料。解決髒讀; (加了讀鎖和寫鎖)

3、可重複讀(repeatable read): 事務內多次讀同乙個資料,結果一樣。解決髒讀、不可重複讀; (讀鎖寫鎖+gap鎖)

4、序列化(serializable): 以鎖表的方式限制併發操作,效率低;解決髒讀、不可重複讀、幻讀

隔離級別越高,併發效能越低。

3.mysql 預設可重複讀:select @@tx_isolation   repeatable-read

oracle預設讀已提交  read committed 

一致非鎖定讀(快照讀):通過 mvcc(多版本併發控制) 為查詢提供了乙個基於時間的點的快照。

rr級別下,快照會在事務中第一次select語句執行時生成,且只有在本事務中對資料進行更改才會更新快照。所以期間其他事務insert的記錄,當前事務是看不到的,也就避免了幻讀的問題;

rc級別下,每一次查詢都會提前更新快照

資料庫事務和事務隔離級別

事務的定義很簡單,就是一組操作,這些操作要麼都執行,要麼都不執行,這一組操作是不可分割的.在資料庫中,事務具有acid特性.也就是原子性 atomicity 一致性 consistency 隔離性 isolation 永續性 durability 原子性是指事務是乙個不可分割的一組操作,要麼都發生,...

資料庫事務和隔離級別

事務的四大特性包括原子性 一致性 隔離性 永續性。事務的併發問題 sql標準定義了四種隔離級別,由低到高,分別是 讀未提交 read uncommitted 讀提交 read committed 可重複讀 repeatable read 序列化 serializable 事務隔離級別是為了解決事務併...

資料庫事務和隔離級別

事務的四大特性包括原子性 一致性 隔離性 永續性。事務的併發問題 sql標準定義了四種隔離級別,由低到高,分別是 讀未提交 read uncommitted 讀提交 read committed 可重複讀 repeatable read 序列化 serializable 事務隔離級別是為了解決事務併...