数据库连接和回滚过程

时间:2012-06-20 06:51:38

标签: database transactions

我想知道一个案子。我有一个使用数据库的项目(Oracle和Mssql)。我的项目有一个框架,我管理交易。 在线程中,我打开一个数据库连接并启动一个事务。(在事务中,有许多更新和插入查询。)当代码运行时,某种方式连接被关闭。因为我有try-catch块,所以我捕获异常和回滚事务。但;如果由于某些原因我的连接被关闭,回滚查询如何在数据库上运行?我该如何处理这种情况?如果我打开一个新连接并回滚,它是否有效?

感谢。

2 个答案:

答案 0 :(得分:1)

你应该知道一个术语 - ACID合规性

  • 原子性是一个全有或全无的命题;
  • 一致性可确保事务永远不会使您的数据库处于半完成状态。
  • 隔离会将事务彼此分开,直到完成为止。
  • 持久性可确保数据库以服务器可以从异常终止中恢复的方式跟踪挂起的更改。

关于MySQL

为了在MySQL上获取此信息,您必须使用事务安全表(TST)。事务安全表Advantages

  • 更安全。即使MySQL崩溃或者您遇到硬件问题,您也可以通过自动恢复或备份+事务日志来恢复数据。
  • 您可以组合多个语句,并使用COMMIT命令一次性接受这些语句。
  • 您可以执行ROLLBACK忽略您的更改(如果您没有在自动提交模式下运行)。
  • 如果更新失败,将恢复所有更改。

关于SQL Server

您应该阅读“Transaction Behavior On Lost Connection”MSDN论坛主题。 要更好地了解MS SQL Server事务背后的内容,请阅读一篇好文章“Locks and Duration of Transactions in MS SQL Server

答案 1 :(得分:0)

确保您没有使用任何自动提交功能(我认为在某些MySQL安装中默认启用)。如果你“手动”完成所有提交,那么断开的连接只会导致你永远不会提交事务,所以它不会被写入。

在大多数数据库系统中,无法重新连接回滚。