sql server 中事务和更新数据的一些疑问

Sylaro0 2013-11-21 12:23:50
在了解SQL SERVER事务的时候出现了一些疑问,情况如下:

会话1,创建了一张表,然后开始了一个事务(更新表id的值为8),但是并未提交
会话2,对表进行查询,因为sql server默认隔离级别是读提交,所以会话2要等到会话1提交后才能进行,到这为止都是可以理解的。


之后我提交了事务1,目前情况是表中的id都是8

又重新开了两个窗口
同样的事务3对表进行更新


这时候事务4却可以访问



sp_lock



有两个问题
1,为什么事务3并未提交,事务4却可以查询表
2,sql server真的会对和update语句中值一样的列进行更新么

...全文
299 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
LongRui888 2013-12-02
  • 打赏
  • 举报
回复
大概的原因: 引用 17 楼 SQL_Beginner 的回复: 答一下下面那个有点奇怪的LOCK行为 http://bbs.csdn.net/topics/390648712 上面那个帖子里,读操作为什么不需要S LOCK? 因为SQL SEVER有个优化机制,在没有脏读可能的情况下,不需要去申请S LOCK,这种现象MSDN上没有记载。 参考: 讨论二:Lock/latch/spinlock,deadlock http://bbs.csdn.net/topics/390657894?page=1#post-396233786
LongRui888 2013-11-21
  • 打赏
  • 举报
回复
你的问题,于这个类似: 锁不住的查询 http://blog.csdn.net/zjcxc/article/details/4383113
LongRui888 2013-11-21
  • 打赏
  • 举报
回复
这个问题之前,我也发现了。 在你的sp_lock图中,可以看出,有3个行有X锁,照理应该是独占的,select应该是查询不到的,但去能查询到。

34,873

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧