Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >为什么我要在失败提交后回滚?

为什么我要在失败提交后回滚?
EN

Stack Overflow用户
提问于 2014-06-19 13:34:17
回答 2查看 2.9K关注 0票数 0

为什么我要在失败的rollback之后commit?万一commit失败,DB无论如何也不会得到更改。那我为什么要叫rollback这个案子呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-06-19 22:18:38

让我们以Oracle事务管理文档为例,它也适用于其他数据库引擎:

事务在提交或回滚时结束,显式地使用COMMIT或ROLLBACK语句,或者在发出DDL语句时隐式结束。

如果不指定提交/回滚,您可能会遇到以下情况:

  • 用户断开与Oracle数据库的连接。当前事务已提交。
  • 用户进程异常终止。当前事务将回滚。

数据库事务管理基于事务日志记录:

  1. 从旧到新的状态转换记录在重做日志中。
  2. 从新到旧的状态转换记录在撤消日志中。

由于事务隔离需求,数据会根据实际的表结构进行更改,并且是锁定机制阻止其他事务看到未提交的更改。实际数据被更改,因为当前事务需要在事务生存期内读取自己的写操作。

因此,实际的数据被更改了,但是由于我们有重做和撤消日志,我们可以很容易地提交/回滚,甚至回滚中的可疑分布事务,这些事务是针对给定数据源成功提交的,而全局事务由于其他已登记的数据源已经回滚而失败。

回滚包括撤消当前未提交事务记录的所有数据更改,因此,如果当前事务失败,则应使用ROOBACK。

票数 1
EN

Stack Overflow用户

发布于 2014-06-19 13:44:20

我认为只有两个原因可以解释提交失败的原因:

  1. dbms不可用或损坏。
  2. 延迟约束生效。

据我所知,T不支持延迟约束。即使是这样,它也应该在失败时执行隐式回滚。

至于不可用或损坏的dbms :如果提交不起作用,为什么要回滚?

结论:当提交失败时,我没有理由执行回滚。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24316603

复制
相关文章
oracle更新不生效以及提交后回滚
使用PL-SQL操作oracle时,执行完更新语句update tab set name='a' where id='1';
chenchenchen
2021/09/06
1.9K0
spring事务回滚机制_事务回滚失败
使用 @Transaction 来配置自动回滚,可以配置在类上,也可以配置在方法上(作用域不同),但对final或private修饰的方法无效,且该类必须是受spring所管控的。
全栈程序员站长
2022/11/01
2.1K0
手动回滚、提交事务
再小的个子,也能给沙漠留下长长的身影;再小的人物,也能让历史吐出重重的叹息。——余秋雨《文化苦旅》 我们可以手动管理事务 首先需要引用两个Bean @Resource private TransactionDefinition transactionDefinition; @Resource private IArticleEnclosureService articleEnclosureService; 然后是使用 PlatformTransactionManager transact
阿超
2022/08/16
9540
咦,为什么我的事务回滚不了?
MySQL 事务小伙伴们都懂,通过 begin 开启事务,通过 commit 提交事务或者通过 rollback 回滚事务。
江南一点雨
2022/01/24
1K0
咦,为什么我的事务回滚不了?
git 回滚代码并保留提交历史
在使用git时,有时候需要回退最新代码到之前的某次提交或某个tag,将中间的所有代码提交去掉。同时保持中间的提交记录。实际应用时发现这个动作没有比较好的实现方式。
王云峰
2023/10/23
3210
Sequelize事务处理回滚失败
在使用Node.js进行服务端开发中我们经常使用Sequelize作为ORM框架,我们对多个数据表进行处理时通常会使用事务处理。在Sequelize事务文档中给了很多方式,主要分为托管和非托管,很多时候我们在回滚时常常发生失败,明明自己以及提交回滚了,但是仍然有数据表被改动了。
用户6256742
2022/09/16
8820
回滚 Git 提交到 GitHub 的 commit 记录
在执行上述命令的时候,可能会提示本地的版本落后于远端的版本,因此我们还需要在上述命令中加上--force参数:
CG国斌
2022/05/06
7750
回滚 Git 提交到 GitHub 的 commit 记录
Redis为什么不支持回滚
1.在Redis中,命令只会因为错误的语法而失败,或者是命令用在了错误类型的键上面;
Vincent-yuan
2021/10/13
1.7K1
oracle存储过程回滚_sql事务回滚
( No INT, Name nvarchar(10), Comment nvarchar(10)
全栈程序员站长
2022/11/01
2.2K0
git 回滚
可以看到你最近本地的操作,找到你最近提交的commit,如图,我最近提交的是fcafa20 记录。
CatEatFish
2020/07/09
1.8K0
git 回滚
嵌套事务回滚策略_内部事务回滚会导致外部事务回滚
1.外部起事务,内部起事务,内外都有Try Catch 内部出错:如果内部事务出错,内部和外部事物全部回滚,外部回滚之前的操作全部不存在,但是之后的操作继续执行。 外部出错:如果外部事物出错,内部和外部事物全部回滚,外部回滚之前的操作全部不存在,但是之后的操作继续执行。 注:如果内部的事务不起事务名称,内部如果出错,将会回滚掉会话中的全部事务,而且报异常。
全栈程序员站长
2022/11/10
3K0
为什么加了@Transactional注解,事务没有回滚?
在前天的《事务管理入门》一文发布之后,有读者联系说根据文章尝试,加了@Transactional注解之后,事务并没有回滚。经过一顿沟通排查之后,找到了原因,在此记录一下,给后面如果碰到类似问题的童鞋一个参考。
程序猿DD
2020/07/16
9360
java 配置事务回滚_Spring@Transactional事务回滚
Spring中事务分为编程时事务和声明式事务,编程式事务:编程人员通过代码控制事务的开启、回滚、提交,声明式事务:把事务的处理交给spring。使用注解@transactional配置就是声明式事务。
全栈程序员站长
2022/11/01
2.4K0
为什么PostgreSQL的回滚是瞬间完成的?
pg数据库的回滚是瞬间完成的。看到这句话是不是觉得pg很先进,确实是这样,但是也是有代价的,下面聊一聊这个问题。
数据库架构之美
2021/01/28
2K0
回滚段undo
可见rollback操作和当前数据库 归档模式并没有关系,只和commit操作有关,一旦commit就无法回滚。
职场亮哥
2020/10/10
1.8K0
回滚段undo
git回滚代码
有时我们需要回滚git上已经提交的代码,特别是已经提交到github上的代码。可以使用如下步骤:
drunkdream
2020/01/02
1.6K0
Deployment回滚(一)
Kubernetes的Deployment可以轻松地进行滚动更新,但是如果出现了问题,可能需要回滚到之前的版本。Deployment提供了回滚功能,可以让我们轻松地回滚到之前的版本。
玖叁叁
2023/04/29
1.6K0
Deployment回滚(二)
如果我们想要回滚到之前的某个版本,我们可以使用以下命令查看Deployment的更新历史记录:
玖叁叁
2023/04/29
1.4K0
Git 代码回滚
sourceTree 中 revert 译为提交回滚,作用为忽略你指定的版本,然后提交一个新的版本。新的版本中已近删除了你所指定的版本。
零式的天空
2022/03/23
1.2K0
git commit回滚
从svn 迁移到 git,已经有很长时间。git 的基本命令已经可以说是熟练的掌握,能够满足日常的开发。想了解常用git命令可以查看: 常用git命令
艳龙
2021/12/16
8.9K0

相似问题

提交后Sqlite回滚

12

事务提交后回滚

24

MySQL提交和回滚失败

10

提交后不能回滚事务

112

MongoDB StartSession提交和回滚失败

15
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文