是否正确?回滚并提交

Posted

技术标签:

【中文标题】是否正确?回滚并提交【英文标题】:is it correct or no? ROLLEDBACK AND COMMIT 【发布时间】:2020-04-13 17:14:10 【问题描述】:

关于 SQL 中的 COMMIT 语句和 ROLLBACK 语句

我知道 ROLLBACK 语句是 COMMIT 语句的逆语句。

如果我们说“COMMIT 语句是 ROLLBACK 语句的逆”

正确与否?如果不是请解释一下

谢谢你的帮助

【问题讨论】:

不,不一样。如果您回滚,则在您执行更多 DML 之前没有什么可提交的 两者都不是另一个的“逆”。一旦你做了一个提交,你就不能回滚。一旦你做了回滚,你就不能提交。你只能说一个与另一个相反 【参考方案1】:

从 SQL Server 的角度来看,“反向”的使用可能会误导“嵌套”事务

COMMIT: 标记成功的隐式或显式事务的结束。

ROLLBACK: 将显式或隐式事务回滚到事务的开头,或事务内的保存点。

例子:

BEGIN TRAN
BEGIN TRAN
SELECT 'sth';
COMMIT;
SELECT @@TRANCOUNT;
-- 1

BEGIN TRAN
BEGIN TRAN
SELECT 'sth';
ROLLBACK;
SELECT @@TRANCOUNT;
-- 0 (nothing to commit)

db<>fiddle demo

【讨论】:

以上是关于是否正确?回滚并提交的主要内容,如果未能解决你的问题,请参考以下文章

如果sql事务中出现问题,则回滚并通知

java 事务方法调用非事务函数会回滚吗

如何知道何时提交或回滚事务

在只有选择的事务中提交和回滚之间有区别吗?

什么是回滚操作

数据库的回滚