为什么我要在失败的rollback
之后commit
?万一commit
失败,DB无论如何也不会得到更改。那我为什么要叫rollback
这个案子呢?
发布于 2014-06-19 22:18:38
让我们以Oracle事务管理文档为例,它也适用于其他数据库引擎:
事务在提交或回滚时结束,显式地使用COMMIT或ROLLBACK语句,或者在发出DDL语句时隐式结束。
如果不指定提交/回滚,您可能会遇到以下情况:
数据库事务管理基于事务日志记录:
由于事务隔离需求,数据会根据实际的表结构进行更改,并且是锁定机制阻止其他事务看到未提交的更改。实际数据被更改,因为当前事务需要在事务生存期内读取自己的写操作。
因此,实际的数据被更改了,但是由于我们有重做和撤消日志,我们可以很容易地提交/回滚,甚至回滚中的可疑分布事务,这些事务是针对给定数据源成功提交的,而全局事务由于其他已登记的数据源已经回滚而失败。
回滚包括撤消当前未提交事务记录的所有数据更改,因此,如果当前事务失败,则应使用ROOBACK。
发布于 2014-06-19 13:44:20
我认为只有两个原因可以解释提交失败的原因:
据我所知,T不支持延迟约束。即使是这样,它也应该在失败时执行隐式回滚。
至于不可用或损坏的dbms :如果提交不起作用,为什么要回滚?
结论:当提交失败时,我没有理由执行回滚。
https://stackoverflow.com/questions/24316603
复制