SQL Server的事務(wù)操作隔離模式介紹
一般而言,最好讓SQL Server以默認(rèn)形式在隔離事務(wù)操作;畢竟,隔離是ACID模型的基本原則之一。但是,有時(shí)候因?yàn)闃I(yè)務(wù)需求的原因,數(shù)據(jù)庫管理員不得不違背默認(rèn)行為,而 是采取更靈活一點(diǎn)的方法來進(jìn)行事務(wù)操作隔離。針對(duì)數(shù)據(jù)庫管理員遇到的這類情況,SQL Serve提供了五種不同的事務(wù)操作隔離模式。在詳細(xì)介紹這些事務(wù)操作隔離模式之前,必需先了管理員會(huì)遇到的數(shù)據(jù)庫問題:
1.臟數(shù)據(jù)讀寫,這種情況發(fā)生在當(dāng)一個(gè)事務(wù)讀寫由另一個(gè)事務(wù)修改而未提交的數(shù)據(jù)的時(shí)候。如果另一個(gè)事物永遠(yuǎn)都不提交其修改數(shù)據(jù),那么第一個(gè)事務(wù)就永遠(yuǎn)都得到一個(gè)無效的值,即臟數(shù)據(jù)。
2.不可重復(fù)讀寫,這種情況發(fā)生在當(dāng)一個(gè)事務(wù)在試圖重復(fù)讀取同一數(shù)據(jù),而另一個(gè)事務(wù)在這第一個(gè)事務(wù)重復(fù)讀取之前修改了此數(shù)據(jù)的時(shí)候。這樣會(huì)使第一個(gè)事務(wù)在讀取同一數(shù)據(jù)時(shí)獲得兩個(gè)不同的值,導(dǎo)致原始數(shù)據(jù)讀取變成不可重復(fù)。
3.影象讀寫,這種情況發(fā)生在當(dāng)一個(gè)事務(wù)在某一個(gè)表格中進(jìn)行多次數(shù)據(jù)查詢,而另一個(gè)事務(wù)插入或者刪除滿足查詢條件的數(shù)據(jù)行。這會(huì)造成前一個(gè)事務(wù)獲得或失去一個(gè)“影象”值。
SQL Server的每一種隔離模式都試圖解決以上問題中的部分,使數(shù)據(jù)庫管理員能夠保持事務(wù)操作隔離和業(yè)務(wù)需求之間的平衡。以下是SQL Server的五種隔離模式:
1.讀寫提交隔離模式,這是SQL Server默認(rèn)的隔離模式,數(shù)據(jù)庫不允許事務(wù)操作讀寫由未提交的事務(wù)操作寫的數(shù)據(jù)。這個(gè)模式可以防止產(chǎn)生臟數(shù)據(jù)讀寫,但是不能防止影象讀寫或不可重復(fù)讀寫的情況。
2.讀寫未提交隔離模式,這種模式基本在事務(wù)操作之間沒有進(jìn)行隔離。任何事務(wù)都可以讀寫由另一個(gè)未提交的事務(wù)寫的數(shù)據(jù)。這種模式下,事務(wù)操作很容易出現(xiàn)臟數(shù)據(jù)讀寫、影象讀寫和不可重復(fù)讀寫的情況。
3.可重復(fù)讀寫隔離模式,比讀寫提交隔離模式更進(jìn)一步,能夠阻止事務(wù)修改正被另一個(gè)事務(wù)讀寫的數(shù)據(jù),直到讀寫操作結(jié)束。這個(gè)隔離模式可以防止臟數(shù)據(jù)讀寫和不可重復(fù)讀寫的情況發(fā)生。
4.串行化隔離模式,這個(gè)模式運(yùn)用范圍鎖防止一個(gè)事務(wù)在另一個(gè)事務(wù)對(duì)數(shù)據(jù)進(jìn)行讀取時(shí)插入或者刪除數(shù)據(jù)行。串行化隔離模式能夠防止上述三種情況的發(fā)生。
5.快照隔離模式,這個(gè)模式同樣可以防止三種情況的發(fā)生,只是方法不同。它為每一個(gè)事務(wù)提供其查詢數(shù)據(jù)的“快照”,事務(wù)可以查詢快照,無需返回到源數(shù)據(jù)表格,從而防止產(chǎn)生臟數(shù)據(jù)讀取。
如果想要改變SQL Server使用的隔離模式,只需要輸入以下命令:
可以用以下關(guān)鍵詞代替:
· READ COMMITTED
· READ UNCOMMITTED
· REPEATABLE READ
· SERIALIZABLE
· SNAPSHOT
這些都是基本的SQL Server事務(wù)隔離模式。
相關(guān)文章
Visual?Studio2022連接SQL?Server數(shù)據(jù)庫的詳細(xì)圖文教程
在visual studio中經(jīng)常會(huì)用到SQL的數(shù)據(jù),關(guān)于數(shù)據(jù)連接總是會(huì)出現(xiàn)一系列的問題,下面這篇文章主要給大家介紹了關(guān)于Visual?Studio2022連接SQL?Server數(shù)據(jù)庫的詳細(xì)圖文教程,需要的朋友可以參考下2023-06-06在SQL Server中備份和恢復(fù)數(shù)據(jù)庫的四種方法
在SQL Server中,創(chuàng)建備份和執(zhí)行還原操作對(duì)于確保數(shù)據(jù)完整性、災(zāi)難恢復(fù)和數(shù)據(jù)庫維護(hù)至關(guān)重要,本文給大家介紹了備份和恢復(fù)數(shù)據(jù)庫的最佳方法,需要的朋友可以參考下2023-12-12SQLServer存儲(chǔ)過程創(chuàng)建和修改的實(shí)現(xiàn)代碼
這篇文章主要介紹了SQLServer存儲(chǔ)過程創(chuàng)建和修改的實(shí)現(xiàn)代碼,需要的朋友可以參考下2017-05-05SQL Server誤區(qū)30日談 第30天 有關(guān)備份的30個(gè)誤區(qū)
備份不會(huì)導(dǎo)致對(duì)用戶對(duì)象加鎖,雖然備份對(duì)IO系統(tǒng)的負(fù)擔(dān)導(dǎo)致看起來阻塞了,但實(shí)際上不會(huì)。唯一的特例是當(dāng)備份包含到那些最小日志操作涉及到的數(shù)據(jù)區(qū)需要被加鎖時(shí),這個(gè)操作會(huì)阻塞CheckPoint,但DML操作永遠(yuǎn)不會(huì)受到備份操作的阻塞2013-01-01SQL Server數(shù)據(jù)庫中的表名稱、字段比較
這篇文章主要給大家介紹了關(guān)于SQl Server數(shù)據(jù)庫中表名稱、字段比較的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用SQL Server具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧2019-09-09SQL Server手工插入標(biāo)識(shí)列的方法
這篇文章介紹了SQL Server手工插入標(biāo)識(shí)列的方法,有需要的朋友可以參考一下2013-10-10sql無效字符 執(zhí)行sql語句報(bào)錯(cuò)解決方案
說起來慚愧,在執(zhí)行sql語句時(shí)總是犯一些小錯(cuò)誤,糾結(jié)半天,這不應(yīng)為一個(gè)分號(hào)的玩意折騰了好半天,需要了解的朋友可以參考下2012-11-11