小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

數(shù)據(jù)庫事務(wù)級(jí)別鎖行為說明

 godenlion 2013-03-11

SET TRANSACTION ISOLATION LEVEL

控制由連接發(fā)出的所有 Microsoft? SQL Server? SELECT 語句的默認(rèn)事務(wù)鎖定行為。

語法

SET TRANSACTION ISOLATION LEVEL
    { READ COMMITTED
        | READ UNCOMMITTED
        | REPEATABLE READ
        | SERIALIZABLE
    }

參數(shù)

READ COMMITTED

指定在讀取數(shù)據(jù)時(shí)控制共享鎖以避免臟讀,但數(shù)據(jù)可在事務(wù)結(jié)束前更改,從而產(chǎn)生不可重復(fù)讀取幻像數(shù)據(jù)。該選項(xiàng)是 SQL Server 的默認(rèn)值。

READ UNCOMMITTED

執(zhí)行臟讀或 0 級(jí)隔離鎖定,這表示不發(fā)出共享鎖,也不接受排它鎖。當(dāng)設(shè)置該選項(xiàng)時(shí),可以對數(shù)據(jù)執(zhí)行未提交讀或臟讀;在事務(wù)結(jié)束前可以更改數(shù)據(jù)內(nèi)的數(shù)值,行也可以出現(xiàn)在數(shù) 據(jù)集中或從數(shù)據(jù)集消失。該選項(xiàng)的作用與在事務(wù)內(nèi)所有語句中的所有表上設(shè)置 NOLOCK 相同。這是四個(gè)隔離級(jí)別中限制最小的級(jí)別。

REPEATABLE READ

鎖定查詢中使用的所有數(shù)據(jù)以防止其他用戶更新數(shù)據(jù),但是其他用戶可以將新的幻像行插入數(shù)據(jù)集,且幻像行包括在當(dāng)前事務(wù)的后續(xù)讀取中。因?yàn)椴l(fā)低于默認(rèn)隔離級(jí)別,所以應(yīng)只在必要時(shí)才使用該選項(xiàng)。

SERIALIZABLE

在數(shù)據(jù)集上放置一個(gè)范圍鎖,以防止其他用戶在事務(wù)完成之前更新數(shù)據(jù)集或?qū)⑿胁迦霐?shù)據(jù)集內(nèi)。這是四個(gè)隔離級(jí)別中限制最大的級(jí)別。因?yàn)椴l(fā)級(jí)別較低,所以應(yīng)只在必要時(shí)才使用該選項(xiàng)。該選項(xiàng)的作用與在事務(wù)內(nèi)所有 SELECT 語句中的所有表上設(shè)置 HOLDLOCK 相同。

注釋

一次只能設(shè)置這些選項(xiàng)中的一個(gè),而且設(shè)置的選項(xiàng)將一直對那個(gè)連接保持有效,直到顯式更改該選項(xiàng)為止。這是默認(rèn)行為,除非在語句的 FROM 子句中在表級(jí)上指定優(yōu)化選項(xiàng)。

SET TRANSACTION ISOLATION LEVEL 的設(shè)置是在執(zhí)行或運(yùn)行時(shí)設(shè)置,而不是在分析時(shí)設(shè)置。

示例

下例為會(huì)話設(shè)置 TRANSACTION ISOLATION LEVEL。對于每個(gè)后續(xù) Transact-SQL 語句,SQL Server 將所有共享鎖一直控制到事務(wù)結(jié)束為止。

SET TRANSACTION ISOLATION LEVEL REPEATABLE READ
GO
BEGIN TRANSACTION
SELECT * FROM publishers
SELECT * FROM authors
...
COMMIT TRANSACTION





臟讀

臟讀包含未提交數(shù)據(jù)的讀。例如,事務(wù)1 更改了某行。事務(wù)2 在事務(wù)1 提交更改之前讀取已更改的行。如果事務(wù)1 回滾更改,則事務(wù)2 便讀取了邏輯上從未存在過的行。

臟讀就是指當(dāng)一個(gè)事務(wù)正在訪問數(shù)據(jù),并且對數(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ù)讀

不可重復(fù)讀取當(dāng)某個(gè)事務(wù)不止一次讀取同一行,并且一個(gè)單獨(dú)的事務(wù)在兩次(或多次)讀取之間修改該行時(shí)。因?yàn)樵谕粋€(gè)事務(wù)內(nèi)的多次讀取之間修改了該行,所以每次讀取都生成不同值,從而引發(fā)不一致問題。

不可重復(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ù)讀。

 

幻像

幻像通過一個(gè)任務(wù),在以前由另一個(gè)尚未提交其事務(wù)的任務(wù)讀取的行的范圍中插入新行或刪除現(xiàn)有行。帶有未提交事務(wù)的任務(wù)由于該范圍中行數(shù)的更改而無法重復(fù)其原始讀取。如果某個(gè)連接設(shè)置其事務(wù)隔離級(jí)別為可串行,則 SQL Server 使用鍵范圍鎖定以防止幻像。

幻覺讀是指當(dāng)事務(wù)不是獨(dú)立執(zhí)行時(shí)發(fā)生的一種現(xiàn)象,例如第一個(gè)事務(wù)對一個(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ā)生了幻覺一樣。

 

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多