如果您不回滚事务,是否仍会进行更改?

Jos*_*son 11 sql-server

说我正在运行一个查询

begin tran

update users
set name = 'Jimmy'
where name = 'john'
Run Code Online (Sandbox Code Playgroud)

如果我回滚事务,是否仍会进行这些更改,它会抛出错误还是会作为回滚?

Kin*_*hah 16

您必须了解事务是什么——它是一个单一的工作单元。它是 ALL 或 NOTHING(遵循ACID 属性),这保证了数据库的一致性。

如果我不回滚事务,是否还会进行这些更改

只有在您提交时才会进行更改。SQL Server 会将所有更改记录到事务日志中,一旦您提交,它们就会被固化到数据文件中。

如果你不提交,那么您的交易将继续开放下去-你可以在看到sys.dm_tran_active_transactions / sys.dm_tran_database_transactions / sys.dm_tran_session_transactions或使用DBCC OPENTRAN

此外,您启动的是一个显式事务,它应该以 COMMIT 或 ROLLBACK 语句显式结束。

另请阅读 -总是创建交易是一种不好的做法吗?


Jus*_*ave 12

如果您既不提交也不回滚事务,则事务将无限期地继续存在。它将继续保持锁定,可能会阻塞其他会话,直到您通过 acommit或 a结束事务rollback或直到 DBA 出现并终止会话(或直到诸如网络打嗝之类的事情导致连接失败)。如果 DBA 终止会话,他们将隐式地为此事务和任何其他打开的事务发出回滚。