如果您不将事务提交到数据库(例如,SQL Server)会发生什么?

Cha*_*bel 100 sql-server transactions commit

假设我有一个查询:

begin tran
-- some other sql code
Run Code Online (Sandbox Code Playgroud)

然后我忘了提交或回滚.

如果另一个客户端尝试执行查询,会发生什么?

mar*_*c_s 136

只要你没有COMMITROLLBACK事务,它仍然"正在运行"并可能持有锁.

如果您的客户端(应用程序或用户)关闭数据库的连接,则任何仍在运行的事务将被回滚并终止.

  • 附注:如果使用Management Studio,关闭查询窗口将关闭连接 (12认同)
  • @BradleyDotNET:是的,绝对 (3认同)
  • 嗯,好吧,我发现这是在创建某种锁。我不确定关闭连接是否真的能让我摆脱这种状态。问题是当我尝试提交时遇到错误。现在我关闭了连接,一切正常。 (2认同)
  • 请记住,默认情况下,如果关闭查询窗口/连接,则SQL Server Management Studio会自动提交。 (2认同)
  • 每个人都应该注意这个回复中的“潜在持有锁”部分。 (2认同)

gjv*_*amp 35

你可以自己尝试一下,这可以帮助你了解它是如何工作的.

在管理工作室中打开两个窗口(选项卡),每个窗口都有自己与sql的连接.

现在你可以在一个窗口中开始一个事务,做一些像插入/更新/删除但尚未提交的东西.然后在另一个窗口中,您可以看到数据库在事务外部的外观.根据隔离级别,表可能会被锁定,直到第一个窗口被提交,或者您可能(不)看到其他事务到目前为止所执行的操作等.

玩弄不同的隔离级别,没有锁定提示,看看它们如何影响结果.

另请参阅在事务中抛出错误时会发生什么.

理解所有这些东西是如何工作的,或者你会被sql所做的事情困扰,很多时候,这一点非常重要.

玩得开心!GJ.


Pis*_*3.0 14

交易旨在完全或根本不运行.完成事务的唯一方法是提交,任何其他方式都将导致回滚.

因此,如果您开始然后不提交,它将在连接关闭时回滚(因为事务被中断而没有标记为完成).


red*_*ver 5

当您打开交易时,没有任何内容会自行锁定。但是,如果您在该事务内执行某些查询,根据隔离级别,某些行、表或页面会被锁定,因此它将影响尝试从其他事务访问它们的其他查询。