SQL Server 事务和锁详解

 

本文章简单的介绍了关于SQL Server,事务和锁的常见问题与用法同时为初学者提供好的参考意见,有需要的可以参考一下。

 

在搞清楚这个问题的过程中做了不少的实验,与各位共享。这一篇是开篇,主要说明的是 SQL Server的四种(其实还有别的)经典的事务隔离级别,以及在不同的隔离级别下锁的使用手段,以及所带来的不同的数据一致性。

SQL Server中锁的种类:

锁类型

描述

Shared Lock

用于只读操作数据锁定。

Update Lock

用于数据的更新,在数据真正的需要更新的时候会申请升级为X锁。

XExclusive Lock

独占锁,用于数据的更改。

Key-Range Lock

仅仅在 Serializable隔离级别保护数据,以避免任何有可能使得本事务第二次读取信息产生错误的数据插入操作。

 

 

各个事务隔离级别下锁的使用

SQL Server中有四种事务隔离级别,具体的大家去参建 MSDN。下面列出在不同的事务隔离级别下这些锁是如何使用的:

隔离级别

读数据锁状态

写数据锁状态

锁持有时间

Read Uncommitted

不获得任何锁

不获得任何锁

 

Read Committed

数据获得锁

对于insertdeleteUpdate的执行,获得X锁;对于Update的标记,获得U锁。

读完即释放,并不持有至事务结束。

Repeatable Read

数据获得S

对于insertdeleteUpdate的执行,获得X锁;对于Update的标记,获得U锁。

持有至事务结束

Serializable

数据获得S锁,同时获得key-Range锁。

对于insertdeleteUpdate的执行,获得X锁;对于Update的标记,获得U锁,同时获得key-Range锁。

持有至事务结束

 

 

我们可以利用这些知识形象说明各个隔离级别下的数据一致性:

Read Uncommitted级别

1)脏读

2)更新丢失

3)不可重复读

4)幻读

Read Committed级别

1)脏读

2)更新丢失

3)不可重复读

4)幻读

Repeatable Read级别

1)脏读

2)更新丢失

3)不可重复读

4)幻读

Serializable级别

1)脏读

2)更新丢失

3)不可重复读

4)幻读

我们从上图可以比较直观的看到一下的结论

锁类型

脏读

更新丢失

不可重复读

幻读

Read Uncommitted

可能

可能

可能

可能

Read Committed

不可能

可能

可能

可能

Repeatable Read

不可能

不可能

不可能

可能

Serializable

不可能

不可能

不可能

不可能

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值