Database 数据库连接和回滚过程

Database 数据库连接和回滚过程,database,transactions,Database,Transactions,我想知道一个案例。我有一个使用数据库(Oracle和Mssql)的项目。我的项目有一个管理事务的框架。 在线程中,我打开一个数据库连接并启动一个事务。(在事务中,有许多更新和插入查询。)当代码运行时,连接不知何故被关闭。因为我有try-catch块,所以我捕获异常和回滚事务。但是若我的连接因为某些原因而关闭,那个么回滚查询如何在数据库上运行呢?我如何处理这种情况?如果我打开一个新连接并回滚,它能工作吗 谢谢。确保您没有使用任何自动提交功能(我认为在某些MySQL安装中默认启用了该功能)。如果您“

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


谢谢。

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


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

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

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

为了在MySQL上实现这一点,您必须使用事务安全表(TST)。事务安全表的类型:

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

您应该阅读“MSDN论坛”主题。 要更好地了解MS SQL Server事务背后的原因,请阅读一篇好文章“”