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

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

數(shù)據(jù)庫事務(wù)和鎖(三)

2024-07-21 02:08:20
字體:
供稿:網(wǎng)友

使用事務(wù)的考慮

在使用事務(wù)時(shí),原則上應(yīng)該使事務(wù)盡可能得短并且要避免事務(wù)嵌套。事務(wù)應(yīng)該盡可能得短,這是因?yàn)楸容^長(zhǎng)的事務(wù)增加了事務(wù)占用數(shù)據(jù)的時(shí)間,使其它必須等待訪問該事務(wù)鎖定數(shù)據(jù)的事務(wù),延長(zhǎng)了等待訪問數(shù)據(jù)的時(shí)間。在使用事務(wù)時(shí),為了使事務(wù)盡可能得短,應(yīng)該采取一些相應(yīng)的方法。為了最小化時(shí)間,在使用一些transact-sql語句時(shí),一定要非常小心。例如,當(dāng)使用循環(huán)語句while時(shí),一定要事先確認(rèn)循環(huán)的長(zhǎng)度和占用的時(shí)間,使這種循環(huán)在完成相應(yīng)的功能之前,一定要確保循環(huán)盡可能得短。在開始事務(wù)之前,一定要了解需要用戶交互式操作才能得到的信息。這樣,在事務(wù)的進(jìn)行過程中,就可以避免進(jìn)行一些耗費(fèi)時(shí)間的交互式操作,縮短事務(wù)進(jìn)程的時(shí)間。在一個(gè)用戶定義的事務(wù)中,應(yīng)該盡可能地使用一些數(shù)據(jù)操縱語言,例如insert、update和delete語句,因?yàn)檫@些語句主要是操縱數(shù)據(jù)庫中的數(shù)據(jù)。而對(duì)于一些數(shù)據(jù)定義語言,應(yīng)該盡可能地少用或者不用,因?yàn)檫@些數(shù)據(jù)定義語言的操作既占用比較長(zhǎng)的時(shí)間,又占用比較多的資源,并且這些數(shù)據(jù)定義語言的操作通常不涉及到數(shù)據(jù),所以應(yīng)該在事務(wù)中盡可能地少用或者不用這些操作。另外,在使用數(shù)據(jù)操縱語言時(shí),要注意,一定要在這些語句中使用條件判斷語句,使得這些數(shù)據(jù)操縱語言涉及到盡可能少的記錄,從而縮短事務(wù)的處理時(shí)間。

在嵌套事務(wù)時(shí),也要注意一些問題。雖然說,在事務(wù)中間嵌套事務(wù)是可能的,并不影響sql server處理事務(wù)的性能。但是,實(shí)際上,使用嵌套事務(wù),除了把事務(wù)搞得更加復(fù)雜之外,并沒有這么明顯的好處。因此,不建議使用嵌套事務(wù)。

事務(wù)的類型

根據(jù)系統(tǒng)的設(shè)置,可以把事務(wù)分成兩種類型。一種是系統(tǒng)提供的事務(wù),另一種是用戶定義的事務(wù)。系統(tǒng)提供的事務(wù)是指在執(zhí)行某些語句時(shí),一條語句就是一個(gè)事務(wù)。這時(shí)要明確,一條語句的對(duì)象既可能是表中的一行數(shù)據(jù),也可能是表中的多行數(shù)據(jù),甚至是表中的全部數(shù)據(jù)。因此,只有一條語句構(gòu)成的事務(wù)也可能包含了多行數(shù)據(jù)的處理。例如執(zhí)行下面這條數(shù)據(jù)操縱語句:

update  authors

set state = ‘ca’

這是一條語句,這條語句本身就構(gòu)成了一個(gè)事務(wù)。這條語句由于沒有使用條件限制,那么這條語句就是修改表中的全部數(shù)據(jù)。所以這個(gè)事務(wù)的對(duì)象,就是修改表中的全部數(shù)據(jù)。如果authors表中有1000行數(shù)據(jù),那么這1000行數(shù)據(jù)的修改要么全部成功,要么全部失敗。

另外一種事務(wù),是用戶明確定義的事務(wù)。在實(shí)際應(yīng)用中,大多數(shù)的事務(wù)處理就是采用了用戶定義的事務(wù)來處理。在開發(fā)應(yīng)用程序時(shí),可以使用begin transaction語句來定義明確的用戶定義的事務(wù)。在使用用戶定義的事務(wù)時(shí),一定要注意兩點(diǎn):一是事務(wù)必須有明確的結(jié)束語句來結(jié)束。如果不使用明確的結(jié)束語句來結(jié)束,那么系統(tǒng)可能把從事務(wù)開始到用戶關(guān)閉連接之間的全部操作都作為一個(gè)事務(wù)來對(duì)待。事務(wù)的明確結(jié)束可以使用這樣兩個(gè)語句中的一個(gè):commit語句和rollback語句。commit語句是提交語句,將全部完成的語句明確地提交到數(shù)據(jù)庫中。rollback語句是取消語句,該語句將事務(wù)的操作全部取消,即表示事務(wù)操作失敗。

還有一種特殊的用戶定義的事務(wù),這就是分布式事務(wù)。前面提到的事務(wù)都是在一個(gè)服務(wù)器上的操作,其保證的數(shù)據(jù)完整性和一致性是指一個(gè)服務(wù)器上的完整性和一致性。但是,如果一個(gè)比較復(fù)雜的環(huán)境,可能有多臺(tái)服務(wù)器,那么要保證在多服務(wù)器環(huán)境中事務(wù)的完整性和一致性,就必須定義一個(gè)分布式事務(wù)。在這個(gè)分布式事務(wù)中,所有的操作都可以涉及對(duì)多個(gè)服務(wù)器的操作,當(dāng)這些操作都成功時(shí),那么所有這些操作都提交到相應(yīng)服務(wù)器的數(shù)據(jù)庫中,如果這些操作中有一條操作失敗,那么這個(gè)分布式事務(wù)中的全部操作都被取消。

鎖和鎖的作用

鎖就是防止其他事務(wù)訪問指定的資源的手段。鎖是實(shí)現(xiàn)并發(fā)控制的主要方法,是多個(gè)用戶能夠同時(shí)操縱同一個(gè)數(shù)據(jù)庫中的數(shù)據(jù)而不發(fā)生數(shù)據(jù)不一致現(xiàn)象的重要保障。一般來說,鎖可以防止臟讀、不可重復(fù)讀和幻覺讀。臟讀就是指當(dāng)一個(gè)事務(wù)正在訪問數(shù)據(jù),并且對(duì)數(shù)據(jù)進(jìn)行了修改,而這種修改還沒有提交到數(shù)據(jù)庫中,這時(shí),另外一個(gè)事務(wù)也訪問這個(gè)數(shù)據(jù),然后使用了這個(gè)數(shù)據(jù)。因?yàn)檫@個(gè)數(shù)據(jù)是還沒有提交的數(shù)據(jù),那么另外一個(gè)事務(wù)讀到的這個(gè)數(shù)據(jù)是臟數(shù)據(jù),依據(jù)臟數(shù)據(jù)所做的操作可能是不正確的。不可重復(fù)讀是指在一個(gè)事務(wù)內(nèi),多次讀同一數(shù)據(jù)。在這個(gè)事務(wù)還沒有結(jié)束時(shí),另外一個(gè)事務(wù)也訪問該同一數(shù)據(jù)。那么,在第一個(gè)事務(wù)中的兩次讀數(shù)據(jù)之間,由于第二個(gè)事務(wù)的修改,那么第一個(gè)事務(wù)兩次讀到的的數(shù)據(jù)可能是不一樣的。這樣就發(fā)生了在一個(gè)事務(wù)內(nèi)兩次讀到的數(shù)據(jù)是不一樣的,因此稱為是不可重復(fù)讀。幻覺讀是指當(dāng)事務(wù)不是獨(dú)立執(zhí)行時(shí)發(fā)生的一種現(xiàn)象,例如第一個(gè)事務(wù)對(duì)一個(gè)表中的數(shù)據(jù)進(jìn)行了修改,這種修改涉及到表中的全部數(shù)據(jù)行。同時(shí),第二個(gè)事務(wù)也修改這個(gè)表中的數(shù)據(jù),這種修改是向表中插入一行新數(shù)據(jù)。那么,以后就會(huì)發(fā)生操作第一個(gè)事務(wù)的用戶發(fā)現(xiàn)表中還有沒有修改的數(shù)據(jù)行,就好象發(fā)生了幻覺一樣。
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 麻江县| 巴南区| 武宣县| 江都市| 金溪县| 安庆市| 姜堰市| 富顺县| 中山市| 霍邱县| 江安县| 咸宁市| 海淀区| 揭东县| 达孜县| 黄浦区| 广东省| 晋城| 米林县| 南岸区| 大石桥市| 那坡县| 潞西市| 涞水县| 胶南市| 咸宁市| 吉首市| 湘潭县| 开江县| 镇江市| 佛教| 遂宁市| 瑞金市| 岗巴县| 讷河市| 宣城市| 道真| 霍林郭勒市| 安西县| 海阳市| 平湖市|