语法:set transaction isolation level read committed。
数据库默认的是两个会话事务之间是提交读。
READ COMMITTED指定语句不能读取已由其他事务修改但尚未提交的数据。 这样可以避免脏读。 其他事务可以在当前事务的各个语句之间更改数据,从而产生不可重复读取和虚拟数据。 该选项是 SQL Server 的默认设置。
READ COMMITTED 的行为取决于 READ_COMMITTED_SNAPSHOT 数据库选项的设置:
如果将 READ_COMMITTED_SNAPSHOT 设置为 OFF(默认设置),则 数据库引擎会使用共享锁防止其他事务在当前事务执行读取操作期间修改行。 共享锁还会阻止语句在其他事务完成之前读取由这些事务修改的行。 共享锁类型确定它将于何时释放。 行锁在处理下一行之前释放。 页锁在读取下一页时释放,表锁在语句完成时释放。
如果将 READ_COMMITTED_SNAPSHOT 设置为 ON,则 数据库引擎会使用行版本控制为每个语句提供一个在事务上一致的数据快照,因为该数据在语句开始时就存在。 不使用锁来防止其他事务更新数据。
修改会话脚本:
--声明数据库引用
use testss;
go
--开始事务
begin transaction readtran
update test1 set name='事务提交读' where id='1';
waitfor delay '00:00:10';
commit transaction;
go
读取会话脚本:
--声明数据库引用
use testss;
go
--开启事务
begin transaction trans
select * from test1 where id='1';
commit transaction;
go
修改会话:依次显示修改执行状态和执行结果。
读取会话:依次显示执行状态和执行结果。
读取会话脚本:
--声明数据库引用
use testss;
go
--设置会话隔离级别
set transaction isolation level read committed;
--开启事务
begin transaction trans
select * from test1 where id='1';
commit transaction;
go
吉公网安备 22020202000301号