交易会影响所有查询吗?

时间:2009-09-25 17:38:25

标签: sql-server-2005 transactions

我在Management Studio中使用BEGIN TRANSACTION启动了一个事务,但我忘记了ROLLBACK或COMMIT它大约10分钟。我吓坏了,回到ROLLBACK我的变化。这是否回滚了在此期间通过服务器或仅通过我的用户/连接进行的所有查询?

6 个答案:

答案 0 :(得分:4)

只是你的联系: - )

(编辑:而不是您的交易,因为BEGIN TRANSACTION。如果您在同一会话中的BEGIN TRANSACTION之前进行了更新,它们当然不会被回滚)

但是:根据正在使用的锁类型和查询提示,它可能给其他会话的SELECT提供了错误的答案......

一个例子:

在一个SQL Studio会话中,执行以下操作:

CREATE TABLE a(a INT)

INSERT INTO a VALUES(1)

BEGIN TRANSACTION

UPDATE  a 
SET a = 2

SELECT *, @@TRANCOUNT
FROM a

- >你会看到'2,1'作为结果

打开一个新会话(Sql studio中的选项卡)

执行:

SELECT *, @@TRANCOUNT
FROM a (NOLOCK)

你会看到'2,0'

现在,在第一次会议中,做

ROLLBACK TRANSACTION

SELECT *, @@TRANCOUNT
FROM a

- >事务回滚,你看到'1,0'

- >第二个会话中的选择也将显示'1,0'

so:如果您使用(NOLOCK)提示,则可以获得未提交的数据 - >这可能会导致意想不到的影响: - )

别忘了:

DROP TABLE a

当你完成了;)

答案 1 :(得分:3)

它应该只影响您的交易,因此只会影响您在此期间在会话中完成的事情。

答案 2 :(得分:1)

你很好。所有其他查询都会很好。

答案 3 :(得分:1)

它应该回滚在事务中进行的所有查询,因此它比您的用户\连接更具体,并且绝对不是框中的所有查询。

答案 4 :(得分:0)

您需要查看交易的ACID属性。您可以看到,如果事务被回滚或提交,则没有什么可担心的,它对其他事务的结果没有影响。

答案 5 :(得分:0)

您的回滚仅影响您的交易。我在ACID。

但是,您锁定的行,页面或整个表格会影响其他用户,如果他们想要使用它们。这取决于:

  • 他们想做什么
  • 锁定超时
  • 客户端命令超时