我在Management Studio中使用BEGIN TRANSACTION
启动了一个事务,但我忘记了ROLLBACK或COMMIT它大约10分钟。我吓坏了,回到ROLLBACK我的变化。这是否回滚了在此期间通过服务器或仅通过我的用户/连接进行的所有查询?
答案 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。
但是,您锁定的行,页面或整个表格会影响其他用户,如果他们想要使用它们。这取决于: