以前對數據庫的隔離級別,有所了解,但不知道真正其中的區別。今天就討論一下這4個隔離級別
下面是4個隔離級別,在SQL server 2005裡的介紹:
READ UNCOMMITTED
指定語句可以讀取已由其他事務修改但尚未提交的行。
READ COMMITTED
指定語句不能讀取已由其他事務修改但尚未提交的數據。這樣可以避免髒讀。其他事務可以在當前事務的各個語句之間更改數據,從而產生不可重復讀取和幻像數據
REPEATABLE READ
其他事務可以插入與當前事務所發出語句的搜索條件相匹配的新行。如果當前事務隨後重試執行該語句,它會檢索新行,從而產生幻讀
SERIALIZABLE
范圍鎖處於與事務中執行的每個語句的搜索條件相匹配的鍵值范圍之內。這樣可以阻止其他事務更新或插入任何行
建立環境:
create table t_emp(id numeric(10)
,name varchar(10),
salary numeric(10,2));
插入數據:
insert into t_emp values(1,'jack',10000.50);
insert into t_emp values(2,'jack2',8000.50);
insert into t_emp values(3,'jack3',120000);
insert into t_emp values(4,'jack4',5000);
insert into t_emp values(5,'jack5',3000);
髒讀
如果一個事務在提交操作結果之前,另一個事務可以看到該結果,就會發生這種情況
測試語句一:
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED
begin tran
select * from dbo.t_emp where id=1