并发性问题(关于防止脏读、不可重复读、幻读)

克莉丝汀娜 xxx 学生  2015-07-17 10:33:50
我建立了两个查询,
第一个:
begin tran
select * from table_1 with (tablock)
where sno='1'
waitfor delay '00:00:10'
commit tran

第二个:
begin tran
update table_1
set name='xxx'
where sno='1'
commit tran

结果第一个查询查到的还是之前的数据。
要怎么修改才能正确读出修改后的数据?

...全文
411 点赞 收藏 2
写回复
2 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
Tiger_Zhao 2015-07-17
会话一要取会话二更新的结果,必须在会话二递交之后再进行读取。
数据库可没有预知这个特异功能(预知别的会话接下来会更改所以等会再读)。
回复
Pact_Alice 2015-07-17
begin tran select * from table_1 with (tablock) where sno='1' waitfor delay '00:00:10' commit tran begin tran update table_1 set name='xxx' where sno='1' select * from table_1 with (tablock) where sno='1' commit tran 你将查询语句放入到第二个语句中 这样在跟新语句之后查询的结果就是更新后的数据 你也可以 将两个语句合并,等待几秒后更新数据,然后在查询更新后的数据
回复
相关推荐
发帖
疑难问题
创建于2007-09-28

2.1w+

社区成员

MS-SQL Server 疑难问题
申请成为版主
帖子事件
创建了帖子
2015-07-17 10:33
社区公告
暂无公告