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

克莉丝汀娜 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

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

...全文
584 2 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
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 你将查询语句放入到第二个语句中 这样在跟新语句之后查询的结果就是更新后的数据 你也可以 将两个语句合并,等待几秒后更新数据,然后在查询更新后的数据

22,300

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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