国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發(fā) > 綜合 > 正文

“臟讀”、“不可重復(fù)的讀”、“虛讀“、”丟失更新“

2024-07-21 02:50:11
字體:
供稿:網(wǎng)友
“臟讀”、“不可重復(fù)的讀”、“虛讀“、”丟失更新“

摘自 http://terje.blog.163.com/blog/static/11924371200952910206453/

以下是我從網(wǎng)上找的:臟讀dirty reads:當(dāng)事務(wù)讀取還未被提交的數(shù)據(jù)時,就會發(fā)生這種事件。舉例來說:Transaction 1 修改了一行數(shù)據(jù),然后 Transaction 2 在 Transaction 1 還未提交修改操作之前讀取了被修改的行。如果 Transaction 1 回滾了修改操作,那么 Transaction 2 讀取的數(shù)據(jù)就可以看作是從未存在過的。 不可重復(fù)的讀non-repeatable reads:當(dāng)事務(wù)兩次讀取同一行數(shù)據(jù),但每次得到的數(shù)據(jù)都不一樣時,就會發(fā)生這種事件。舉例來說:Transaction 1 讀取一行數(shù)據(jù),然后 Transaction 2 修改或刪除該行并提交修改操作。當(dāng) Transaction 1 試圖重新讀取該行時,它就會得到不同的數(shù)據(jù)值(如果該行被更新)或發(fā)現(xiàn)該行不再存在(如果該行被刪除)。 虛讀phantom read:如果符合搜索條件的一行數(shù)據(jù)在后面的讀取操作中出現(xiàn),但該行數(shù)據(jù)卻不屬于最初的數(shù)據(jù),就會發(fā)生這種事件。舉例來說:Transaction 1 讀取滿足某種搜索條件的一些行,然后 Transaction 2 插入了符合 Transaction 1 的搜索條件的一個新行。如果 Transaction 1 重新執(zhí)行產(chǎn)生原來那些行的查詢,就會得到不同的行。

數(shù)據(jù)庫帶來的并發(fā)問題包括:

  1.丟失或覆蓋更新。(幻像讀)

  2.未確認(rèn)的相關(guān)性(臟讀)。

  3.不一致的分析(非重復(fù)讀)。

詳細(xì)描述如下:

一.丟失更新

當(dāng)兩個或多個事務(wù)選擇同一行,然后基于最初選定的值更新該行時,會發(fā)生丟失更新問題。每個事務(wù)都不知道其它事務(wù)的存在。最后的更新將重寫由其它事務(wù)所做的更新,這將導(dǎo)致數(shù)據(jù)丟失。  

e.g.事務(wù)A和事務(wù)B同時修改某行的值,

1.事務(wù)A將數(shù)值改為1并提交

2.事務(wù)B將數(shù)值改為2并提交。

這時數(shù)據(jù)的值為2,事務(wù)A所做的更新將會丟失。

解決辦法:對行加鎖,只允許并發(fā)一個更新事務(wù)。

二.未確認(rèn)的相關(guān)性(臟讀)

  當(dāng)?shù)诙€事務(wù)選擇其它事務(wù)正在更新的行時,會發(fā)生未確認(rèn)的相關(guān)性問題。第二個事務(wù)正在讀取的數(shù)據(jù)還沒有確認(rèn)并且可能由更新此行的事務(wù)所更改。

e.g.

1.Mary的原工資為1000, 財務(wù)人員將Mary的工資改為了8000(但未提交事務(wù)) 2.Mary讀取自己的工資 ,發(fā)現(xiàn)自己的工資變?yōu)榱?000,歡天喜地!

3.而財務(wù)發(fā)現(xiàn)操作有誤,回滾了事務(wù),Mary的工資又變?yōu)榱?000

像這樣,Mary記取的工資數(shù)8000是一個臟數(shù)據(jù)。

解決辦法:如果在第一個事務(wù)提交前,任何其他事務(wù)不可讀取其修改過的值,則可 以避免該問題。

三.不一致的分析(非重復(fù)讀)

  當(dāng)?shù)诙€事務(wù)多次訪問同一行而且每次讀取不同的數(shù)據(jù)時,會發(fā)生不一致的分析問題。不一致的分析與未確認(rèn)的相關(guān)性類似,因?yàn)槠渌聞?wù)也是正在更改第二個事務(wù)正在讀取的數(shù)據(jù)。然而,在不一致的分析中,第二個事務(wù)讀取的數(shù)據(jù)是由已進(jìn)行了更改的事務(wù)提交的。而且,不一致的分析涉及多次(兩次或更多)讀取同一行,而且每次信息都由其它事務(wù)更改;因而該行被非重復(fù)讀取。

在一個事務(wù)中前后兩次讀取的結(jié)果并不致,導(dǎo)致了不可重復(fù)讀。

e.g.

1.在事務(wù)1中,Mary 讀取了自己的工資為1000,操作并沒有完成

2.在事務(wù)2中,這時財務(wù)人員修改了Mary的工資為2000,并提交了事務(wù).

3.在事務(wù)1中,Mary 再次讀取自己的工資時,工資變?yōu)榱?000

解決辦法:如果只有在修改事務(wù)完全提交之后才可以讀取數(shù)據(jù),則可以避免該問題。

四.幻像讀   

 當(dāng)對某行執(zhí)行插入或刪除操作,而該行屬于某個事務(wù)正在讀取的行的范圍時,會發(fā)生幻像讀問題。事務(wù)第一次讀的行范圍顯示出其中一行已不復(fù)存在于第二次讀或后續(xù)讀中,因?yàn)樵撔幸驯黄渌聞?wù)刪除。同樣,由于其它事務(wù)的插入操作,事務(wù)的第二次或后續(xù)讀顯示有一行已不存在于原始讀中。

  e.g.目前工資為1000的員工有10人。

1.事務(wù)1,讀取所有工資為1000的員工。

2.這時事務(wù)2向employee表插入了一條員工記錄,工資也為1000

3.事務(wù)1再次讀取所有工資為1000的員工共讀取到了11條記錄,

解決辦法:如果在操作事務(wù)完成數(shù)據(jù)處理之前,任何其他事務(wù)都不可以添加新數(shù)據(jù),則可避免該問題


發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 柘荣县| 吉木萨尔县| 古蔺县| 紫云| 句容市| 安仁县| 柏乡县| 壶关县| 苍山县| 海伦市| 大洼县| 获嘉县| 阳新县| 游戏| 和龙市| 六枝特区| 金门县| 秭归县| 巨野县| 十堰市| 朝阳县| 伊吾县| 剑川县| 灌阳县| 松桃| 清镇市| 象山县| 巫山县| 七台河市| 东山县| 阳信县| 寻甸| 友谊县| 榆树市| 白沙| 靖边县| 剑河县| 厦门市| 瑞昌市| 阳东县| 汉阴县|