在显式交易中,如果我通过给出BEGIN TRANS开始交易,但如果我不给COMMIT,ROLLBACK或END TRANS那么应用程序会发生什么?
答案 0 :(得分:8)
答案 1 :(得分:6)
因为您的事务可能会锁定数据库的某些部分,所以在您发出其中一个命令之前,可能会导致其他事务/查询被阻塞。
在某些时候,无论如何,必须完成交易。当某些内容出现“错误”(例如应用程序结束)时,它将被回滚,除非您先提交它。
答案 2 :(得分:1)
如果应用程序退出,则隐式关闭连接并回滚。
如果应用程序在应用程序服务器(例如ASPNET,Java应用程序服务器等)中运行,那么连接可能会返回到池中,希望它在重新使用之前重置,并且事务最终会回滚(但是也许不是立即)。
如果未使用的连接位于池中,它最终可能会被应用服务器关闭,此时事务肯定会回滚。
要小心保持打开的事务太长时间 - 你会持有锁(如果你改变了什么)并阻止旧行被清理,这可能会对有大量“流失”的数据库产生非常不利的影响”
答案 3 :(得分:0)
如果您打开一个交易,最终会出现不需要的行为。如果在您的应用程序返回到池的连接时未回滚,则您将拥有阻止事务。 如果它被回滚,你的工作就会丢失。无论哪种方式,这都不是您在生产环境中所希望的行为。
/HåkanWinther