欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  数据库

SQL SERVER的锁机制(三)概述(锁与事务隔离级别)

程序员文章站 2022-05-27 14:01:23
...

接上文SQL SERVER的锁机制(二)概述(锁的兼容性与可以锁定的资源) 五、锁与事务隔离级别 事务隔离级别简单的说,就是当激活事务时,控制事务内因 SQL 语句产生的锁定需要保留多入,影响范围多大,以防止多人访问时,在事务内发生数据查询的错误。设置事务

接上文SQL SERVER的锁机制(二)——概述(锁的兼容性与可以锁定的资源)

五、锁与事务隔离级别

事务隔离级别简单的说,香港服务器,就是当激活事务时,控制事务内因SQL语句产生的锁定需要保留多入,影响范围多大,以防止多人访问时,在事务内发生数据查询的错误。设置事务隔离级别将影响整条连接。

SQL Server 数据库引擎支持所有这些隔离级别:

· 未提交读(隔离事务的最低级别,只能保证不读取物理上损坏的数据)

· 已提交读(数据库引擎的默认级别)

· 可重复读

· 可序列化(隔离事务的*别,事务之间完全隔离)

SQL Server 还支持使用行版本控制的两个事务隔离级别。一个是已提交读隔离的新实现,另一个是新事务隔离级别(快照)。

设置语句如下:

SET TRANSACTION ISOLATION LEVEL

{ READ UNCOMMITTED

| READ COMMITTED

| REPEATABLE READ

| SNAPSHOT

| SERIALIZABLE

}

[ ; ]

(一)未提交读

未提交读是最低的事务隔离级别,允许读取其他事务已经修改但未提交的数据行。SQL SERVER 当此事务等级进行尝试读取数据时,不会放置共享锁,直接读取数据,所以忽略已存在的互斥锁。换句话说,即使该资源已经受到了独占锁的保护,当使用未提交读隔离级别时,此数据还是可以被读取,加快查询速度,但是会读取到别人未修改的数据,所以此种读取被称为脏读。此种隔离级别适合不在乎数据变更的查询场景。此隔离级别与SELECT 语句搭配 NOLOCK 所起到的效果相同

未提交读示例:

--1.--1.创建测试表

create table tbUnRead

(ID INT,

name nvarchar(20)

)

--2新增记录

insert tbUnRead

select 1,'Tom'

union

select 2,'Jack'

--3开启事务,并进行更新

begin tran

update tbUnRead

set name='Jack_upd'

where ID=2