日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

数据库 / 事务的隔离级别

發布時間:2024/10/14 数据库 72 豆豆
生活随笔 收集整理的這篇文章主要介紹了 数据库 / 事务的隔离级别 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、什么是事務的隔離性?

兩個人同時在一個畫本上畫畫,過程中你一筆我一筆,那么最后最后畫出來的一定是一個四不像,多個事務同時操作一個數據也會和上面的情況類似,所以為了讓不同的事務之間相互不存在干擾,就需要對事務的操作進行隔離,事務的隔離性也就是將操作同一個數據的事務相互分離,讓操作之間分開有序的執行。

二、如果不對事務進行隔離會有哪些問題?

在數據庫中,如果多個事務可以同時操作一個數據,那么就會產生臟讀、重復讀、幻讀的問題。

1、臟讀

出現原因:修改數據的同時可以讀取數據。

案例: 以存款為例,假設 A 與 B 同用一張銀行卡,銀行卡內余額為 1000 。

操作: 如下圖所示,當事務 B 對余額進行了修改但是未提交事務,此時事務 A 對銀行卡余額進行讀取,并且在這個數據的基礎上進行業務操作,進行存款,結果會導致最終的銀行卡余額出現問題 ;

2、不重復讀

出現原因: 讀取數據的同時可以進行修改;

案例: 以取款為例,假設 A 與 B 同用一張銀行卡,銀行卡內余額為1000。

操作: 如下圖所示,事務 A ,事務 B 同時對余額進行訪問,事務 A 對余額進行讀取,事務 B 對余額進行修改,當事務 A 第一次對余額進行讀取后,此時事務 B 提交,那么當事務 A 第二次讀取該數據時的數據就與第一次讀取的數據不同,這種情況稱為可重復讀;

3、幻讀

出現原因:讀取和修改的時候可以 insert 數據;

案例: 以打印銀行卡賬單存款記錄為例,假設 A 與 B 同用一張銀行卡,銀行卡內存款記錄為兩條。

操作: 如下圖所示,存款表有 2 條數據,A 對存款表進行讀取, 當 A 第一次讀取到存款記錄的時候只有 2 條數據; 但是與此同時 B 往銀行卡進行了一筆存款然后提交了事務,在 B 提交了存款事務之后,A 執行了打印操 作,最后發現打印存款表信息的時候卻發現有 3 條數據,與之前查出的數據不一樣,這種平白無故多出來 的數據就好象發生了幻覺一樣所以稱為幻讀;


三、事務的四種級別

就像上面所說的,如果不對事務進行隔離那么勢必就會產生很多問題,所以就需要一種機制來對不同事務間的操作進行隔離,讓彼此之間相互不影響,數據庫對事務隔離設置有四種程度的級別,分別為讀未提交、讀提交、重復讀、序列化;級別依次從低倒高,級別越高事務的之間的隔離操作就越嚴格,當然要求越嚴格其性能也會越低。

1、READ_UNCOMMITTED(讀未提交)

這種情況只限制了兩個數據不能同時修改,但是修改數據的時候是可以讀取的,這級別的事務隔離有臟讀、重復讀、幻讀的問題;

2、READ_COMMITTED(讀提交)

這種隔離級別的事務限制了修改數據的時候不允許讀取,但是讀取數據的時候是可以進行修改的,所以這種事務的隔離級別解決了臟讀問題,但會存在重復讀、幻讀問題;

3、REPEATABLE_READ(重復讀)

這種隔離級別的事務限制了讀取數據的時候也不可以進行修改,所以解決了重復讀的問題,但是讀取范圍數據的時候可以插入數據,所以還會存在幻讀問題;

4、SERIALIZABLE (序列化)

事務最高隔離級別,在該級別下,所有事務都是進行串行化順序執行,這樣就可以避免臟讀、不可重復讀與幻讀所有問題了。但是這種事務隔離級別下事務執行的效率低下,比較耗數據庫性能。

轉載于:https://zhuanlan.zhihu.com/p/27790194

(SAW:Game Over!)

與50位技術專家面對面20年技術見證,附贈技術全景圖

總結

以上是生活随笔為你收集整理的数据库 / 事务的隔离级别的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。