日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
數(shù)據(jù)庫隔離特性:保證數(shù)據(jù)一致性和完整性 (數(shù)據(jù)庫隔離的特性)

在現(xiàn)代的信息化社會(huì)中,數(shù)據(jù)庫系統(tǒng)是無處不在的。無論是互聯(lián)網(wǎng)還是各種企業(yè)信息系統(tǒng)都離不開數(shù)據(jù)庫。數(shù)據(jù)庫的作用是保存和管理數(shù)據(jù),因此數(shù)據(jù)庫系統(tǒng)的安全性和穩(wěn)定性非常重要。其中,數(shù)據(jù)庫的隔離特性是數(shù)據(jù)庫系統(tǒng)中非常重要的一環(huán),它直接關(guān)系到數(shù)據(jù)的一致性和完整性。

創(chuàng)新互聯(lián)網(wǎng)站建設(shè)提供從項(xiàng)目策劃、軟件開發(fā),軟件安全維護(hù)、網(wǎng)站優(yōu)化(SEO)、網(wǎng)站分析、效果評(píng)估等整套的建站服務(wù),主營(yíng)業(yè)務(wù)為成都網(wǎng)站設(shè)計(jì)、網(wǎng)站制作,成都App定制開發(fā)以傳統(tǒng)方式定制建設(shè)網(wǎng)站,并提供域名空間備案等一條龍服務(wù),秉承以專業(yè)、用心的態(tài)度為用戶提供真誠(chéng)的服務(wù)。創(chuàng)新互聯(lián)深信只要達(dá)到每一位用戶的要求,就會(huì)得到認(rèn)可,從而選擇與我們長(zhǎng)期合作。這樣,我們也可以走得更遠(yuǎn)!

隔離特性是指在數(shù)據(jù)庫系統(tǒng)中,要求不同的事務(wù)互不干擾,可以并行執(zhí)行,且保證數(shù)據(jù)一致性和完整性的性質(zhì)。在實(shí)際的數(shù)據(jù)庫系統(tǒng)中,我們常常需要同時(shí)運(yùn)行多個(gè)事務(wù),因此要保證事務(wù)之間互相獨(dú)立,不會(huì)產(chǎn)生干擾和沖突。對(duì)于數(shù)據(jù)庫系統(tǒng)的隔離特性,可以從以下幾個(gè)方面來詳細(xì)討論。

一、事務(wù)的概念

在數(shù)據(jù)庫系統(tǒng)中,事務(wù)是數(shù)據(jù)庫操作的最小單位,它是一系列操作的,這些操作構(gòu)成了一個(gè)不可分割的工作單元。如果所有操作都成功執(zhí)行,則事務(wù)被提交,將對(duì)數(shù)據(jù)進(jìn)行更新,否則它將被回滾并撤消對(duì)數(shù)據(jù)庫的操作。事務(wù)有四個(gè)基本特性,即原子性、一致性、隔離性和持久性。

二、隔離的必要性

我們都知道,不同的事務(wù)之間可能會(huì)同時(shí)操作同一份數(shù)據(jù),如果沒有隔離性,就會(huì)出現(xiàn)臟讀、不可重復(fù)讀和幻讀等問題。所謂臟讀是指一個(gè)事務(wù)讀取了另一個(gè)事務(wù)未提交的數(shù)據(jù),這樣讀取的數(shù)據(jù)是不可靠的。不可重復(fù)讀是指一個(gè)事務(wù)重復(fù)讀取同一數(shù)據(jù)行,但在這個(gè)過程中,其他已提交的事務(wù)可能對(duì)同一數(shù)據(jù)行進(jìn)行了修改,這就導(dǎo)致了不一致的結(jié)果。幻讀則是指一個(gè)事務(wù)在前后兩次查詢中查到了不同的數(shù)據(jù),原因是在查詢中間有其它事務(wù)插入了新的記錄。

因此,為了保證數(shù)據(jù)的一致性和完整性,就需要數(shù)據(jù)庫系統(tǒng)提供隔離特性,避免各種沖突和問題的出現(xiàn)。

三、事務(wù)隔離的級(jí)別

為了解決因并發(fā)執(zhí)行多個(gè)事務(wù)而產(chǎn)生的問題,數(shù)據(jù)庫系統(tǒng)提供了多個(gè)事務(wù)隔離級(jí)別。在標(biāo)準(zhǔn)的SQL92標(biāo)準(zhǔn)中,定義了四個(gè)隔離級(jí)別,分別是讀未提交(Read Uncommitted)、讀提交(Read Committed)、可重復(fù)讀(Repeatable Read)和序列化(Serializable)。不同的隔離級(jí)別會(huì)給數(shù)據(jù)的一致性和完整性帶來不同的影響。

1. 讀未提交

讀未提交隔離級(jí)別是更低的級(jí)別,它允許一個(gè)事務(wù)讀取另一個(gè)事務(wù)未提交的數(shù)據(jù)。這種隔離級(jí)別可能導(dǎo)致臟讀、不可重復(fù)讀和幻讀等問題,因此很少使用。

2. 讀提交

這個(gè)隔離級(jí)別要求一個(gè)事務(wù)只能讀取另一個(gè)事務(wù)已經(jīng)提交的數(shù)據(jù),這樣能確保不會(huì)產(chǎn)生臟讀問題。但它仍然有可能出現(xiàn)不可重復(fù)讀和幻讀問題。

3. 可重復(fù)讀

可重復(fù)讀隔離級(jí)別要求一個(gè)事務(wù)可以多次讀取同一份數(shù)據(jù),而其他事務(wù)不能修改這些數(shù)據(jù)。這種隔離級(jí)別可以避免臟讀和不可重復(fù)讀問題,但仍有可能出現(xiàn)幻讀問題。

4. 序列化

序列化隔離級(jí)別是更高的隔離級(jí)別,它要求所有的事務(wù)按照一個(gè)序列執(zhí)行,這樣可以避免所有并發(fā)問題,但是會(huì)對(duì)性能造成很大的影響。

四、數(shù)據(jù)庫隔離的實(shí)現(xiàn)

為了實(shí)現(xiàn)不同的隔離級(jí)別,數(shù)據(jù)庫系統(tǒng)使用了一系列的技術(shù)手段。其中,最常用的技術(shù)有鎖和版本控制。

1. 鎖機(jī)制

鎖機(jī)制可以實(shí)現(xiàn)事務(wù)的隔離,使各個(gè)事務(wù)在競(jìng)爭(zhēng)資源時(shí)遵循嚴(yán)格的順序。鎖的種類有共享鎖和排它鎖。共享鎖是用于保護(hù)讀取操作的,多個(gè)并發(fā)事務(wù)可以同時(shí)取得共享鎖。排它鎖則是用于保護(hù)寫入操作的,一個(gè)事務(wù)在進(jìn)行寫操作時(shí)需要獲取獨(dú)占鎖,其他事務(wù)則不能同時(shí)進(jìn)行讀或?qū)懖僮鳌?/p>

2. 版本控制

版本控制是另一種實(shí)現(xiàn)事務(wù)隔離的技術(shù),它可以避免讀寫沖突,每個(gè)事務(wù)都可以訪問自己的數(shù)據(jù)版本。版本控制技術(shù)通過為每個(gè)數(shù)據(jù)庫行創(chuàng)建多個(gè)版本來實(shí)現(xiàn)。每次事務(wù)修改數(shù)據(jù)時(shí),都會(huì)為該數(shù)據(jù)創(chuàng)建一個(gè)新版本,并在舊版本上添加新的版本號(hào)。其他事務(wù)則可以繼續(xù)讀取舊版本的數(shù)據(jù),直到該版本被當(dāng)前事務(wù)修改為止。

五、

數(shù)據(jù)庫的隔離特性是數(shù)據(jù)庫系統(tǒng)中非常重要的一環(huán),它直接關(guān)系到數(shù)據(jù)的一致性和完整性。事務(wù)隔離的級(jí)別不同,對(duì)數(shù)據(jù)的影響也不同。為了實(shí)現(xiàn)不同的隔離級(jí)別,數(shù)據(jù)庫系統(tǒng)使用了一系列的技術(shù)手段,如鎖和版本控制等。通過完善的隔離特性,可以盡可能地避免因并發(fā)操作而導(dǎo)致的各種問題和矛盾,確保數(shù)據(jù)的正確性和穩(wěn)定性,提高數(shù)據(jù)庫系統(tǒng)的可靠性和穩(wěn)定性。

相關(guān)問題拓展閱讀:

  • mysql 的事務(wù)隔離級(jí)別 及各個(gè)隔離級(jí)別應(yīng)用場(chǎng)景,詳細(xì)

mysql 的事務(wù)隔離級(jí)別 及各個(gè)隔離級(jí)別應(yīng)用場(chǎng)景,詳細(xì)

默認(rèn)的行為(不帶session和global)是為下一個(gè)(未開始)事務(wù)設(shè)置隔離級(jí)別褲兄。如果你使用GLOBAL關(guān)鍵字,語句在全局對(duì)從那點(diǎn)開始創(chuàng)建的所有新連接(除了不存在的連接)設(shè)置默認(rèn)事務(wù)級(jí)別。

使用SESSION 關(guān)鍵字為將來在當(dāng)前連接上執(zhí)行的事務(wù)設(shè)置默認(rèn)事務(wù)級(jí)別。滾爛 任何客戶端都能自由改變會(huì)話隔離級(jí)別(甚至在事務(wù)的中間胡備襲),或者為下一個(gè)事務(wù)設(shè)置隔離級(jí)別。

術(shù)式之后皆為邏輯,一切皆為需求和實(shí)現(xiàn)。希望此文能從需求、現(xiàn)狀和解決方式的角度幫大家理解隔離級(jí)別。

隔離級(jí)別的產(chǎn)生

在串型執(zhí)行的條件下,數(shù)據(jù)修改的順序是固定的、可預(yù)期的結(jié)果,但是并發(fā)執(zhí)行的情況下,數(shù)據(jù)的修改是不可預(yù)期的,也不固定,為了實(shí)現(xiàn)數(shù)據(jù)修改在并發(fā)執(zhí)行的情況下得到一個(gè)固定、可預(yù)期的結(jié)果,由此產(chǎn)生了隔離級(jí)別。

所以隔離級(jí)別的作用是用來平衡數(shù)據(jù)庫并發(fā)訪問與數(shù)據(jù)一致性的方法。

事務(wù)的4種隔離級(jí)別

READ UNCOMMITTED    行豎   未提交讀,可以讀取未提交的數(shù)據(jù)。READ COMMITTED已提交讀,對(duì)于鎖定讀(select with for update 或者 for share)、update 和 delete 語句,InnoDB 僅鎖定索引記錄,而不鎖定它們之間的間隙,因此允許在鎖定的記錄旁邊自由插入新記錄。Gap locking 僅用于外鍵約束檢查和重復(fù)鍵檢查。REPEATABLE READ可重復(fù)讀,事務(wù)中的一致性讀取讀取的是事務(wù)之一次讀取所建立的快照。SERIALIZABLE序列化

在了解了 4 種隔離級(jí)別的需求后,在采用鎖控制隔離級(jí)別的基礎(chǔ)上,我們需要了解加鎖的對(duì)象(數(shù)據(jù)本身&間隙),以及了解整個(gè)數(shù)據(jù)范圍的全集組成。

數(shù)據(jù)范圍全集組成

SQL 語句根據(jù)條件判斷不需要掃描的數(shù)據(jù)范圍(不加鎖);

SQL 語句根據(jù)條件掃描到的可能需要加鎖的數(shù)據(jù)范圍;

以單個(gè)數(shù)據(jù)范圍為例,數(shù)據(jù)范圍全集包含:(數(shù)據(jù)范圍不一定是連續(xù)的值,也可能是間隔的值組成)

1. 數(shù)據(jù)已經(jīng)填充了整個(gè)數(shù)據(jù)范圍:(被完全填充的數(shù)據(jù)范圍,不存在數(shù)據(jù)間隙)

整形,對(duì)值具有唯一約束條件的數(shù)據(jù)范圍 1~5 ,

已有數(shù)據(jù)1、2、3、4、5,此時(shí)數(shù)據(jù)范圍已被完全填充;

整形,對(duì)值具有唯一約束條件的數(shù)據(jù)范圍 1 和 5 ,

已有數(shù)據(jù)1、5,此時(shí)數(shù)據(jù)范圍已被完全填充;

2. 數(shù)據(jù)填充了部分?jǐn)?shù)據(jù)范圍:(未被完全填充的數(shù)據(jù)范圍,是存在數(shù)據(jù)間隙)

整形的數(shù)據(jù)范圍 1~5 ,

已有數(shù)據(jù) 1、2、3、4、5,但是因?yàn)闆]有唯一約束,

所以數(shù)據(jù)范圍可以繼續(xù)被 1~5 的數(shù)據(jù)重復(fù)填充;

整形,具有唯一約束條件的數(shù)據(jù)范圍 1~5 ,

已有數(shù)據(jù) 2,5,此時(shí)數(shù)據(jù)范圍未被完全填充,還可以填充 1、3、4 ;

3. 數(shù)據(jù)范圍內(nèi)沒有任何數(shù)據(jù)(存在間隙)

如下:

整形的數(shù)據(jù)范圍 1~5 ,數(shù)據(jù)范圍內(nèi)當(dāng)前沒有任何數(shù)據(jù)。

在了解了數(shù)據(jù)全集的組成后,我們?cè)賮砜纯词聞?wù)并發(fā)時(shí),會(huì)帶來的問題。

無控制的并發(fā)所帶來的問題

并發(fā)事務(wù)如果不加以控制的話會(huì)帶來一些問題,主要包括以下幾種情況。

1. 范圍內(nèi)已有數(shù)據(jù)更改導(dǎo)致的:

更新丟失:當(dāng)多個(gè)事務(wù)選擇了同一行,然后基于最初選定的值更新該行時(shí),

由于每個(gè)事物不知道其陸塌他事務(wù)的存在,最后的更新就會(huì)覆蓋其他事務(wù)所做的更新;

臟讀: 一個(gè)事務(wù)正在對(duì)一條記錄做修改,這個(gè)事務(wù)完成并提交前,這條記錄就處于不一致狀態(tài)。

這時(shí),另外一個(gè)事務(wù)也來讀取同一條記錄,如果不加控制,

第二個(gè)事務(wù)讀取了這些“臟”數(shù)據(jù),并據(jù)此做了進(jìn)一步的處理,就會(huì)產(chǎn)生提交的數(shù)據(jù)依賴關(guān)系。

這種現(xiàn)象就叫“臟讀”。

2. 范圍內(nèi)數(shù)據(jù)量發(fā)生了變化導(dǎo)致:

不可重復(fù)讀:一個(gè)事早帶圓務(wù)在讀取某些數(shù)據(jù)后的某個(gè)時(shí)間,再次讀取以前讀過的數(shù)據(jù),

卻發(fā)現(xiàn)其讀出的數(shù)據(jù)已經(jīng)發(fā)生了改變,或者某些記錄已經(jīng)被刪除了。

這種現(xiàn)象就叫“不可重復(fù)讀”。

幻讀:一個(gè)事務(wù)按相同的查詢條件重新讀取以前檢索過的數(shù)據(jù),

卻發(fā)現(xiàn)其他事務(wù)插入了滿足其查詢條件的新數(shù)據(jù),這種現(xiàn)象稱為“幻讀”。

可以簡(jiǎn)單的認(rèn)為滿足條件的數(shù)據(jù)量變化了。

因?yàn)闊o控制的并發(fā)會(huì)帶來一系列的問題,這些問題會(huì)導(dǎo)致無法滿足我們所需要的結(jié)果。因此我們需要控制并發(fā),以實(shí)現(xiàn)我們所期望的結(jié)果(隔離級(jí)別)。

MySQL 隔離級(jí)別的實(shí)現(xiàn)

InnoDB 通過加鎖的策略來支持這些隔離級(jí)別。

行鎖包含:

Record Locks

索引記錄鎖,索引記錄鎖始終鎖定索引記錄,即使表中未定義索引,

這種情況下,InnoDB 創(chuàng)建一個(gè)隱藏的聚簇索引,并使用該索引進(jìn)行記錄鎖定。

Gap Locks

間隙鎖是索引記錄之間的間隙上的鎖,或者對(duì)之一條記錄之前或者最后一條記錄之后的鎖。

間隙鎖是性能和并發(fā)之間權(quán)衡的一部分。

對(duì)于無間隙的數(shù)據(jù)范圍不需要間隙鎖,因?yàn)闆]有間隙。

Next-Key Locks

索引記錄上的記錄鎖和索引記錄之前的 gap lock 的組合。

假設(shè)索引包含 10、11、13 和 20。

可能的next-key locks包括以下間隔,其中圓括號(hào)表示不包含間隔端點(diǎn),方括號(hào)表示包含端點(diǎn):

(負(fù)無窮大, 10>    (10, 11>    (11, 13>    (13, 20>    (20, 正無窮大)對(duì)于最后一個(gè)間隔,next-key將會(huì)鎖定索引中更大值的上方,

左右滑動(dòng)進(jìn)行查看

“上確界”偽記錄的值高于索引中任何實(shí)際值。

上確界不是一個(gè)真正的索引記錄,因此,實(shí)際上,這個(gè) next-key 只鎖定更大索引值之后的間隙。

基于此,當(dāng)獲取的數(shù)據(jù)范圍中,數(shù)據(jù)已填充了所有的數(shù)據(jù)范圍,那么此時(shí)是不存在間隙的,也就不需要 gap lock。

對(duì)于數(shù)據(jù)范圍內(nèi)存在間隙的,需要根據(jù)隔離級(jí)別確認(rèn)是否對(duì)間隙加鎖。

默認(rèn)的 REPEATABLE READ 隔離級(jí)別,為了保證可重復(fù)讀,除了對(duì)數(shù)據(jù)本身加鎖以外,還需要對(duì)數(shù)據(jù)間隙加鎖。

READ COMMITTED 已提交讀,不匹配行的記錄鎖在 MySQL 評(píng)估了 where 條件后釋放。

對(duì)于 update 語句,InnoDB 執(zhí)行 “semi-consistent” 讀取,這樣它會(huì)將最新提交的版本返回到 MySQL,

以便 MySQL 可以確定該行是否與 update 的 where 條件相匹配。

總結(jié)&延展:

唯一索引存在唯一約束,所以變更后的數(shù)據(jù)若違反了唯一約束的原則,則會(huì)失敗。

當(dāng) where 條件使用二級(jí)索引篩選數(shù)據(jù)時(shí),會(huì)對(duì)二級(jí)索引命中的條目和對(duì)應(yīng)的聚簇索引都加鎖;所以其他事務(wù)變更命中加鎖的聚簇索引時(shí),都會(huì)等待鎖。

行鎖的增加是一行一行增加的,所以可能導(dǎo)致并況下死鎖的發(fā)生。

例如,

在 session A 對(duì)符合條件的某聚簇索引加鎖時(shí),可能 session B 已持有該聚簇索引的 Record Locks,而 session B 正在等待 session A 已持有的某聚簇索引的 Record Locks。

session A 和 session B 是通過兩個(gè)不相干的二級(jí)索引定位到的聚簇索引。

session A 通過索引 idA,session B通過索引 idB 。

當(dāng) where 條件獲取的數(shù)據(jù)無間隙時(shí),無論隔離級(jí)別為 rc 或 rr,都不會(huì)存在間隙鎖。

比如通過唯一索引獲取到了已完全填充的數(shù)據(jù)范圍,此時(shí)不需要間隙鎖。

間隙鎖的目的在于阻止數(shù)據(jù)插入間隙,所以無論是通過 insert 或 update 變更導(dǎo)致的間隙內(nèi)數(shù)據(jù)的存在,都會(huì)被阻止。

rc 隔離級(jí)別模式下,查詢和索引掃描將禁用 gap locking,此時(shí) gap locking 僅用于外鍵約束檢查和重復(fù)鍵檢查(主要是唯一性檢查)。

rr 模式下,為了防止幻讀,會(huì)加上 Gap Locks。

事務(wù)中,SQL 開始則加鎖,事務(wù)結(jié)束才釋放鎖。

就鎖類型而言,應(yīng)該有優(yōu)化鎖,鎖升級(jí)等,例如rr模式未使用索引查詢的情況下,是否可以直接升級(jí)為表鎖。

就鎖的應(yīng)用場(chǎng)景而言,在回放場(chǎng)景中,如果確定事務(wù)可并發(fā),則可以考慮不加鎖,加快回放速度。

鎖只是并發(fā)控制的一種粒度,只是一個(gè)很小的部分:

從不同場(chǎng)景下是否需要控制并發(fā),(已知無交集且有序的數(shù)據(jù)的變更,MySQL 的 MTS 相同前置事務(wù)的多事務(wù)并發(fā)回放)

并發(fā)控制的粒度,(鎖是一種邏輯粒度,可能還存在物理層和其他邏輯粒度或方式)

相同粒度下的優(yōu)化,(鎖本身存在優(yōu)化,如IX、IS類型的優(yōu)化鎖)

粒度加載的安全&性能(如獲取行鎖前,先獲取頁鎖,頁鎖在執(zhí)行獲取行鎖操作后即釋放,無論是否獲取成功)等多個(gè)層次去思考并發(fā)這玩意。

數(shù)據(jù)庫隔離的特性的介紹就聊到這里吧,感謝你花時(shí)間閱讀本站內(nèi)容,更多關(guān)于數(shù)據(jù)庫隔離的特性,數(shù)據(jù)庫隔離特性:保證數(shù)據(jù)一致性和完整性,mysql 的事務(wù)隔離級(jí)別 及各個(gè)隔離級(jí)別應(yīng)用場(chǎng)景,詳細(xì)的信息別忘了在本站進(jìn)行查找喔。

成都網(wǎng)站設(shè)計(jì)制作選創(chuàng)新互聯(lián),專業(yè)網(wǎng)站建設(shè)公司。
成都創(chuàng)新互聯(lián)10余年專注成都高端網(wǎng)站建設(shè)定制開發(fā)服務(wù),為客戶提供專業(yè)的成都網(wǎng)站制作,成都網(wǎng)頁設(shè)計(jì),成都網(wǎng)站設(shè)計(jì)服務(wù);成都創(chuàng)新互聯(lián)服務(wù)內(nèi)容包含成都網(wǎng)站建設(shè),小程序開發(fā),營(yíng)銷網(wǎng)站建設(shè),網(wǎng)站改版,服務(wù)器托管租用等互聯(lián)網(wǎng)服務(wù)。


名稱欄目:數(shù)據(jù)庫隔離特性:保證數(shù)據(jù)一致性和完整性 (數(shù)據(jù)庫隔離的特性)
瀏覽地址:http://www.5511xx.com/article/cdosehe.html