代码之家  ›  专栏  ›  技术社区  ›  Joe Phillips

事务是否影响所有查询?

  •  4
  • Joe Phillips  · 技术社区  · 16 年前

    我用 BEGIN TRANSACTION 在ManagementStudio中,但我忘记了回滚或提交大约10分钟。我吓坏了,回去回滚我的更改。这是否回滚了在此期间通过服务器的所有查询,或者只是通过我的用户/连接进行的查询?

    6 回复  |  直到 16 年前
        1
  •  4
  •   Brimstedt    16 年前

    只是你的连接:—)

    (编辑:更确切地说,是您的事务,自开始事务以来。如果在同一会话中的begin事务之前进行了更新,则它们当然不会回滚)

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

    一个例子:

    在一个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”

    因此:如果您使用(nolock)提示,则可以获得未提交的数据作为结果->,这可能会导致非常意外的影响:-)

    别忘了:

    DROP TABLE a
    

    完成后;)

        2
  •  3
  •   Jeremy Bourque    16 年前

    它应该只影响您的事务,所以只影响您在会话期间所做的事情。

        3
  •  1
  •   Larsenal    16 年前

    你很好。所有其他问题都会处理得很好。

        4
  •  1
  •   stonemetal    16 年前

    它应该回滚事务中所做的所有查询,因此它比用户\连接更具体,而且肯定不是框中的所有查询。

        5
  •  0
  •   Vincent Ramdhanie    16 年前

    你需要回顾一下 ACID 交易的属性。您可以看到,不必担心事务是否回滚或提交,它对其他事务的结果没有影响。

        6
  •  0
  •   gbn    16 年前

    回滚只影响事务。酸中的I。

    但是,如果您锁定的行、页或整个表希望使用它们,它们将影响其他用户。这取决于:

    • 他们想做什么
    • 锁超时
    • 客户端命令超时
    推荐文章