0

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

谢谢。

4

2 回答 2

1

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

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

关于 MySQL

为了在 MySQL 中获得此功能,您必须使用事务安全表 (TST)。事务安全表的优点:

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

关于 SQL Server

您应该阅读“丢失连接的事务行为”MSDN 论坛主题。要更好地了解 MS SQL Server 事务背后的内容,请阅读一篇好文章“ MS SQL Server 中的事务锁定和持续时间

于 2012-06-20T07:01:22.917 回答
0

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

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

于 2012-06-20T06:54:58.373 回答