SQL 中 COMMIT 和 ROLLBACK 的区别

17 Mar 2025 | 4 分钟阅读

COMMIT 和 ROLLBACK 是 SQL 事务中用于执行或撤销事务的两个术语。在深入了解 COMMIT 和 ROLLBACK 之前,我们需要先理解“事务”这个术语。事务是指一组逻辑上相关的 SQL 语句或查询,它们被视为一个单一的工作单元。每个事务都以一个特定的任务开始,并在该组任务完成后结束。如果其中任何一个任务失败,整个事务就会失败。为了在 SQL 中完成一个事务,我们需要执行各种操作,例如:开始事务、设置事务、提交、回滚以及设置事务的保存点。在这里,我们将只讨论 COMMIT 和 ROLLBACK 这两个术语及其在 SQL 中的区别。

COMMIT vs ROLLBACK in SQL

什么是 SQL COMMIT?

COMMIT 是 SQL 命令,用于在事务表或数据库中将当前事务或数据库语句所做的更改永久保存。它表示事务的成功完成。如果我们成功执行了事务语句或简单的数据库查询,并且希望将这些更改永久生效,我们就需要执行commit 命令来保存这些更改,这些更改将对所有用户永久可见。此外,一旦在数据库中执行了 commit 命令,我们就无法恢复到执行第一条语句之前的状态。

语法

考虑包含以下记录的 Employees 表

EMPIDEMP NAME年龄地址工资
101JOHN32CALIFORNIA5000$
102DANIEL38LOS ANGELES2900$
103MARIA27TEXAS4900$
104JOY39FLORIDA3200$
105ROOT28SAN FRANCISCO2800$
106MARCUS27CALIFORNIA1000$

在上面的示例中,我们将从EMPLOYEES表中删除所有年龄为 27 的记录,然后执行COMMIT查询,将更改永久保存,并使其对数据库中的所有用户可见。

按照以下 SQL 查询操作

之后,使用select命令从 Employees 表中检索所有记录。

输出

EMPIDEMP NAME年龄地址工资
101JOHN32CALIFORNIA5000$
102DANIEL38LOS ANGELES2900$
104JOY39FLORIDA3200$
105ROOT28SAN FRANCISCO2800$

在上面的表中,当 COMMIT 查询执行后,它将永久保存 EMPLOYEES 表的更改,并且这些更改对所有数据库用户可见。

什么是 SQL ROLLBACK?

SQL ROLLBACK 命令用于在事务执行期间发生任何错误时回滚当前事务的状态。在事务中,错误可能包括系统故障、停电、事务执行不正确、系统崩溃等。通常,rollback 命令会将当前事务回滚到其先前状态或第一个语句。只有在用户尚未对当前事务或语句执行COMMIT命令的情况下,才能执行 rollback 命令。

语法

考虑包含以下记录的 Employees 表

EMPIDEMP NAME年龄地址工资
101JOHN32CALIFORNIA5000$
102DANIEL38LOS ANGELES2900$
103MARIA27TEXAS4900$
104JOY39FLORIDA3200$
105ROOT28SAN FRANCISCO2800$
106MARCUS27CALIFORNIA1000$

在上面的示例中,我们将从EMPLOYEES表中删除所有年龄为 27 的记录,然后执行ROLLBACK查询以从 EMPLOYEES 表中检索被删除的记录。

按照以下 SQL 查询操作

表 - EMPLOYEES

EMPIDEMP NAME年龄地址工资
101JOHN32CALIFORNIA5000$
102DANIEL38LOS ANGELES2900$
104JOY39FLORIDA3200$
105ROOT28SAN FRANCISCO2800$

在上表中,Employees 表中删除了两行年龄为 27 的记录,它们满足年龄条件。然后执行 ROLLBACK 查询来撤销这些操作。

之后,使用select命令从 Employees 表中检索所有记录。

输出

表 - EMPLOYEES

EMPIDEMP NAME年龄地址工资
101JOHN32CALIFORNIA5000$
102DANIEL38LOS ANGELES2900$
103MARIA27TEXAS4900$
104JOY39FLORIDA3200$
105ROOT28SAN FRANCISCO2800$
106MARCUS27CALIFORNIA1000$

COMMIT 和 ROLLBACK 之间的区别

基于参数的比较COMMIT 语句ROLLBACK 语句
定义/基本概念COMMIT 语句用于将当前事务的更改永久保存。Rollback 语句用于撤销当前事务中进行的所有更改。
事务条件一旦使用 COMMIT 命令完全执行了当前事务,就无法撤销其之前的状态。而在 Rollback 语句中,一旦当前事务成功执行,它就可以使用 ROLLBACK 命令恢复到其之前的状态。
语句语法Commit;Rollback;
发生情况当事务完成后应用 COMMIT 语句。当事务被中止、断电或系统执行错误/故障时,Rollback 语句会发生。
成功执行语句。如果所有语句都成功执行且没有错误,COMMIT 语句将永久保存状态。如果在事务完成过程中任何操作失败,它将显示所有更改均未成功执行,我们可以使用 ROLLBACK 语句撤销它们。
可见的更改当我们执行 commit 命令时,当前事务语句将永久生效并对所有用户可见。而 rollback 命令对所有用户也是可见的,即使当前事务可能包含错误或正确的信息。

结论

Commit 命令确保事务更改被永久保存在数据库或表中以完成事务。相反,rollback 命令用于在事务期间撤销所有更改,以应对任何类型的问题,如停电、错误数据,或者将当前事务恢复到其初始阶段。


下一主题DDL vs DML