1.read uncommitted(臟讀)(讀取正在提交的數(shù)據(jù)) read uncommitted(又稱(chēng)讀取未提交內(nèi)容)允許任務(wù)讀取數(shù)據(jù)庫(kù)中未提交的數(shù)據(jù)更改。 測(cè)試腳本: 創(chuàng)建表 CREATE TABLE [dbo].[testTb]( [ID] [int] NULL, [Name] [char](20) NULL ) 2.建立 事務(wù)A:插入數(shù)據(jù) begin
1.read uncommitted(臟讀)(讀取正在提交的數(shù)據(jù))
read uncommitted(又稱(chēng)讀取未提交內(nèi)容)允許任務(wù)讀取數(shù)據(jù)庫(kù)中未提交的數(shù)據(jù)更改。
測(cè)試腳本:
CREATE TABLE [dbo].[testTb](
[ID] [int] NULL,
[Name] [char](20) NULL
)
2.建立 事務(wù)A:插入數(shù)據(jù)
begin tran
insert into testTb values(5,'e')
waitfor delay '00:00:10'
commit;
3.建立事務(wù)B:讀取數(shù)據(jù)
set transaction isolation level read uncommitted
begin tran
select * from testTb
commit;
4.運(yùn)行事務(wù)A立即運(yùn)行事務(wù)B,此時(shí)事務(wù)A還沒(méi)有提交,而事務(wù)B可以讀取事務(wù)A正在提交的數(shù)據(jù)
2.read committed(提交讀)(不能讀取正在提交的數(shù)據(jù))
級(jí)別Read Committed(又稱(chēng)讀取已提交內(nèi)容)可防止臟讀。該級(jí)別查詢(xún)只讀取已提交的數(shù)據(jù)更改。如果事務(wù)需要讀取被另一未完成事務(wù) 修改的數(shù)據(jù),該事務(wù)將等待,直到第一個(gè)事務(wù)完成(提交或回退)。
CREATE TABLE [dbo].[testTb](
[ID] [int] NULL,
[Name] [char](20) NULL
)
2.建立 事務(wù)A:插入數(shù)據(jù)
begin tran
insert into testTb values(5,'e')
waitfor delay '00:00:10'
commit;
3.建立事務(wù)B:讀取數(shù)據(jù)
set transaction isolation level read committed
begin tran
select * from testTb
commit
4.運(yùn)行事務(wù)A立即運(yùn)行事務(wù)B,此時(shí)事務(wù)A還沒(méi)有提交,而事務(wù)B必須等到事務(wù)A完成后才可以讀取數(shù)據(jù)
3.REPEATABLE READ(可重復(fù)讀)(讀取數(shù)據(jù)是不能修改)
指定語(yǔ)句不能讀取已由其他事務(wù)修改但尚未提交的行,并且指定,其他任何事務(wù)都不能在當(dāng)前事務(wù)完成之前修改由當(dāng)前事務(wù)讀取的數(shù)據(jù)。
CREATE TABLE [dbo].[testTb](
[ID] [int] NULL,
[Name] [char](20) NULL
)
2.建立 事務(wù)A:更新數(shù)據(jù)
begin tran
update testTb set Name='CV' where ID='8'
waitfor delay '00:00:10'
commit;
3.建立事務(wù)B:讀取數(shù)據(jù)
set transaction isolation level repeatable read
begin tran
select * from testTb
commit
4.運(yùn)行事務(wù)A立即運(yùn)行事務(wù)B,此時(shí)事務(wù)A還沒(méi)有提交,而事務(wù)B必須等到事務(wù)A完成后才可以讀取數(shù)據(jù)
4.SERIALIZABLE(順序讀)(讀取數(shù)據(jù)是不可插入或修改)
CREATE TABLE [dbo].[testTb](
[ID] [int] NULL,
[Name] [char](20) NULL
)
2.建立 事務(wù)A:更新數(shù)據(jù)和插入數(shù)據(jù)
begin tran
insert into testTb values(9,'d')
update testTb set Name='CV' where ID='8'
waitfor delay '00:00:010'
commit;
3.建立事務(wù)B:讀取數(shù)據(jù)
set transaction isolation level level serializable
begin tran
select * from testTb
commit;
4.運(yùn)行事務(wù)A立即運(yùn)行事務(wù)B,此時(shí)事務(wù)A還沒(méi)有提交,而事務(wù)B必須等到事務(wù)A完成后才可以讀取數(shù)據(jù)
聲明:本網(wǎng)頁(yè)內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問(wèn)題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com