資料庫事務隔離級別與實現原理

2021-09-12 08:57:04 字數 2311 閱讀 9177

1、原子性(atomic):指的是事物所有的操作要麼全做、要麼全不做。

2、一致性(consistency):事物應該確認資料庫從乙個一致狀態轉變為另乙個一致狀態。(資料庫中的資料應滿足完整性約束)

3、隔離性(isolation):指的是多個事物併發執行的時候、乙個事物的執行不應當影響到其它的事物、即事物與事物之間是隔離的。

4、永續性(durability):指的是乙個事物一旦提交、它對資料庫的修改應該永久儲存在資料庫中。

1、更新丟失---即乙個事物的更新覆蓋了另乙個事物的更新。導致另乙個事物的更新丟失。

比如、你和你妻子共同有個銀行賬戶、裡面原來有1000塊錢、你這個月發工資了、把你的4300塊錢

的工資存入了銀行,本來應該有5300塊錢的工資。但是在這個過程中、你妻子去取錢、她想取500

買個口紅、結果取得過程中、銀行的取錢系統出故障了、導致資料回滾、然後銀行的賬戶變成了

1000、這個時候你存入的4300塊錢就不莫得了。

2、髒讀---指的是乙個事物讀到了另乙個事物未提交的資料。

還是上面的場景、當你存錢的時候、你妻子正在查詢餘額、這個時候你還沒存成功、你妻子查詢出

來的賬戶餘額有5300、然後存錢系統出故障了,導致存錢失敗。你妻子看錢多了、打算買了1500的

口紅、但是取得時候提示餘額不足。所以你晚上回去就跪搓衣板了。

3、不可重複讀 --- 在乙個事物中、對同一資料進行兩次讀取。但是讀取到的結果不一致。

上面的場景重現、在你存錢之前、你妻子想把賬戶裡面所有的錢取出來。但是忘了賬戶裡面還有多

少錢、查詢了一下還有1000,這個時候你不是存錢了而是打算取100塊錢買包菸。等你取完之後、

你妻子接了個**、聊了十幾分鐘、掛了**後完了自己卡裡面有多少錢了,又查了一次、這個時

候查到了900塊。但是你妻子又想起了第一次看還有1000的現在就剩900了。然後。。。。涼了

4、幻讀-----在乙個事物中、乙個語句查詢出來的結果不一致(不可重複讀的不一致、指的是資料修

改、而幻讀的不一致指的是新增或者刪除)。即第一次讀取到的資料相比較第二次少了幾條或者多了

幾條就好像產生了幻覺一樣。

1、讀未提交(read-uncommitted):這種隔離級別下、會解決更新丟失的問題、出現髒讀、不可重複讀和幻讀的問題。

2、讀已提交(read-committed):這種隔離級別下會出現不可重複讀和幻讀的問題。(這是oracle的預設隔離級別)

3、可重複讀(repeatable read):這種情況下會出現幻讀的問題。(這是mysql預設的隔離級別、其實mysql在這種隔離級別下解決了幻讀的問題)

4、序列化(serializable):這種隔離級別最高、也是最慢、它是以序列化的方式執行的。解決所有的併發問題。

由於篇幅限制、暫時就不將測試的貼上來了。給出一些測試中用到的dml和ddl語句。

查詢事物隔離級別的sql語句: select @@tx_isolation

設定事物隔離級別: set global | session transaction isolation

level [read uncommitted | read committed | repeatable read | serializable]

例如將資料庫全域性的隔離級別設定為讀未提交 : set global transaction isolation level read uncommitted;

將資料庫的當前session設定為可重複讀的級別:set session transaction isolation level repeatable read;

查詢資料庫的自動提交是否開啟:show variables like 'autocommit'

如果開啟手動將其關閉: set autocommit = off ps:這個只是關閉當前session的

首先、事物的併發是通過加鎖的方式來解決。

但是這種鎖不是常說的讀鎖(共享鎖)或者寫鎖(排他鎖)。而是叫next-key鎖。

next-key鎖就是行鎖+gap鎖(間隙鎖)。

官方給出的解釋是:間隙鎖是鎖定索引記錄之間的間隙。或鎖定在第乙個或最後乙個索引記錄之前的

間隙。例如select * from table where id between 1 and 10 是鎖定1-10的間隙。

總結下來就是:

首先、如果where條件全部命中、則不會加gap鎖、只會加記錄鎖。

如果條件全部命中或者部分命中則會加gap鎖。

當整個語句不走索引的時候、會進行鎖表。

資料庫 事務與隔離級別

事務概述 redo log概述 undo log概述 事務控制語句 配置引數 控制語句 事務隔離級別 隔離級別簡介 mvcc併發控制 鎖型別簡介 事務是作為單個邏輯操作單元的一系列操作。事務可以包含一條或多條sql語句,所有的語句被當做乙個操作單元,要麼全部成功 要麼全部失敗 即作為乙個原子操作 資...

資料庫事務隔離級別

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

資料庫事務隔離級別

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