我经常看到很多人在事务中使用SELECT
语句。我经常只在事务中使用insert/update/delete
。我就是不明白把SELECT
语句放在事务中有什么用。
我得到了一个答案,事务内的SELECT
可以看到该事务中其他以前的Insert/Update/Delete
语句所做的更改,而事务外的SELECT
语句则不能。
上面的陈述是真的还是假的?
这是人们将SELECT
语句放在事务中的唯一原因吗?如果可能,请详细讨论所有原因。谢谢
发布于 2012-03-22 18:01:56
试着这样做,你就会明白:
在SSMS上打开两个新查询(从现在起分别称为A和B),并在A上创建一个简单的表,如下所示:
create table transTest(id int)
insert into transTest values(1)
现在,执行以下操作:
在这两个文件中执行select * from transTest
。您将看到值1
在运行中:
set transaction isolation level read committed
在B运行时:
begin transaction
insert into transTest values(2)
在运行中:
select * from transTest
您将看到查询不会完成,因为它被A上的事务锁定
在B运行时:
commit transaction
返回到A,您将看到查询已完成
在A上使用set transaction isolation level read uncommitted
重复测试,您将看到查询不会被事务锁定
https://stackoverflow.com/questions/9818465
复制相似问题