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

2021-09-29 17:58:59 字數 2447 閱讀 1117

吐槽一下,最近真的是太忙了,又得準備面試找工作,又得準備六級,還得做學校的科研專案,還得做目前的學習專案,總之,一頭霧水。

今天來總結一下資料庫事務的四種隔離級別,對自己的知識做乙個梳理總結;

資料庫隔離級別分為四種:

read-uncommittedread-committedrepeatable-readserializable

下面分別來介紹:

1.read-uncommitted:從英文的字面意思來理解就是(讀-未被提交的資料)uncommitted有被動的意思,這個事務的隔離級別呢就是,你能讀取到別人沒有提交的資料;

舉個例子:這裡有一張賬戶表,是你女朋友的賬戶哦!

比如:你今天很開心,打算給女朋友1000塊錢零花錢,但是你一不小心手多摁了個0變成了10000,相當於你執行這樣一條sql語句(update account set balance = 10000 where id = 1),就在這時你女朋友檢視了一下自己的餘額,發現有10000塊,很激動;此時,你發現不對勁,發現多摁了個0,趕緊執行了rollback語句,此時,你女朋友餘額變為0,這時女朋友興高采烈的打過來**告訴你,我卡里多了一萬塊錢;你笑著說,你再看一次;她發現變成了0,然後變得很不開心;

你女朋友檢視到自己有一萬塊的這個過程就叫:讀到了你未提交的資料。

產生的問題:這個事務伴隨而來的問題就是產生了髒讀的問題;

2.read-committed:從英文的字面意思理解就是(讀-提交了的資料)committed被提交的意思,這個事務的隔離級別就是,你只能讀到別人提交了的資料;

舉個例子:女朋友拿到了你給的一千塊錢零花錢,說終於能買下自己在購物車裡躺了好久的漂亮衣服了,於是就開啟某寶,準備付款了(產生了乙個事務在操作當前的1000),又猶豫了會兒;就在這個時候,你的好哥們和你說,江湖救急啊,快藉我1000塊,你無奈只能將女朋友賬戶的一千塊借了出去(此時,有乙個新的事務操作了這個1000,兩個事務同時操作,女友的付款只能等待你的事務提交之後再執行);就在女友準備支付了,發現餘額不足了,然後又變得很不開心;

你女朋友付款只能等待你的事務結束的這個過程就叫做:只能讀取到你提交了的資料。

解決的問題:解決了髒讀,因為是提交以後才能讀取到,自然不會產生髒讀;

帶來的問題:不可重複讀,女朋友付款之前還是1000,付款時就變成了0,兩次讀取的結果不一樣,就是不可重複讀的問題;

3.repeatable-read: 還是從英文本面理解意思是(可重複讀)-able結尾的代表有什麼什麼的能力,這個事務的隔離級別就是,你可以多次讀取乙個資料,而且在你讀取的過程中,值不會發生改變;

舉個例子:你又發工資了,把一千塊錢給了女朋友,女朋友心想,終於能買衣服了,開啟某寶,但是女朋友還是不放心你,非得在他買衣服的過程中看住你(相當於資料庫使用repeatable-read這個事務隔離級別),女友順利的買下了心愛的衣服;奈何她怎麼能看的住乙個程式猿呢,就在女朋友付款的同時(付款事務已經產生),你用高深的手段在女友的購物車中新增了乙個200塊錢的記憶體條;女友驚訝道:明明我的衣服是八百塊錢,為什麼扣了我1000塊錢,然後檢視自己的購物資訊,發現多了乙個記憶體條的資訊,感覺自己產生了幻覺;

解決的問題:解決了髒讀和不可重複讀的問題,repeatable-read這個事務隔離級別,在事務產生之後,就不允許另乙個事務進行操作該資料了;

帶來的問題:幻讀,女朋友在結算的時候,你神出鬼沒的新增了一條資料,讓女友產生了幻讀;

4.serializable:英文意思為序列化的,這是資料庫事務的最高隔離級別,這個事務的隔離級別,就是操作乙個資料的事務只能乙個執行完,另乙個事務才能產生

舉個例子:經過了這幾次的曲折離奇之後,女朋友再也不相信你,在她買東西的時候,非得把你的手機沒收了,她買完之後,再把手機給你,你再買(順序執行,乙個結束之後,另乙個開始

解決的問題:serializable可以解決之前所有隔離級別產生的問題,就因為它的順序執行;

產生的問題:順序執行,也因此呢,使用這個隔離級別,資料庫處理資料的效率會變的底下,畢竟魚與熊掌,不可兼得;

注意:

級別越高解決的問題越多但是效率越低。

並不是所有資料庫都支援這四種事務隔離級別,比如oracle就只支援第二種和第四種這倆種,比如mysql就四種全支援.

oracle裡面預設的事務隔離級別是第二種:read-committed

資料庫事務四種隔離級別

定義 在資料庫操作中,為了有效保證併發讀取資料的正確性,提出的事務隔離級別。資料庫事務的隔離級別有4個,由低到高依次為read uncommitted 未授權讀取 讀未提交 read committed 授權讀取 讀提交 repeatable read 可重複讀取 serializable 序列化 ...

資料庫事務四種隔離級別

定義 在資料庫操作中,為了有效保證併發讀取資料的正確性,提出的事務隔離級別。資料庫事務的隔離級別有4個,由低到高依次為read uncommitted 未授權讀取 讀未提交 read committed 授權讀取 讀提交 repeatable read 可重複讀取 serializable 序列化 ...

資料庫事務四種隔離級別

定義 在資料庫操作中,為了有效保證併發讀取資料的正確性,提出的事務隔離級別。資料庫事務的隔離級別有4個,由低到高依次為read uncommitted 未授權讀取 讀未提交 read committed 授權讀取 讀提交 repeatable read 可重複讀取 serializable 序列化 ...