SQL 中的 Commit 和 Rollback17 Mar 2025 | 6 分钟阅读
注意:关于 rollback 命令需要注意的一点是,如果您已经提交了最近的更改,则无法回滚您的事务。在这种情况下,您只能回滚到上一个永久更改。让我们看几个实际的例子来更清楚地理解这个概念。我们将使用 MySQL 数据库来编写所有查询。 示例 1 让我们选择现有的数据库 dbs。 然后我们将编写以下查询在 'dbs' 数据库中创建一个表 ![]() 然后,我们将使用 BEGIN / START TRANSACTION 命令开始我们的事务。 ![]() 现在,我们将插入 student 表的记录。 ![]() 我们将执行 SELECT 查询以验证所有记录是否已成功插入 student 表。 您将获得以下表格作为输出:
我们将提交我们的事务以将所有更改永久保存到磁盘。 ![]() 现在,通过将 auto-commit 的值设置为 0 来关闭自动提交。 ![]() 然后我们将删除 ID 为 5 的 student 记录。 ![]() 为了验证 delete 查询的结果,我们将再次使用 SELECT 查询。
之后,我们认为我们需要之前删除的记录,即 ID 为 5 的记录。如我们所知,在删除 ID 为 5 的记录之前,我们已将包含五条记录的整个 student 表通过 commit 命令存储到磁盘。 我们将执行 ROLLBACK 命令以恢复在执行 delete 命令之前保存的原始表。 ![]() 在 rollback 命令之后,我们需要执行 SELECT 命令来查看 student 表的记录。
以上结果表明,在使用 rollback 命令后,成功从磁盘检索了包含五条记录的 student 表。 现在,编写一个查询来更新记录,并将 ID 为 1 的 student 的 percentage 设置为 80。 ![]() 为了验证 update 查询的结果,我们将再次使用 SELECT 查询。在这里,此 update 查询将应用于回滚命令后检索的表。
现在,我们将再次回滚我们的事务并执行 select 查询 ![]()
我们可以看到所有记录都恢复到了应用 update 查询之前的状态。 示例 2 让我们选择现有的数据库 dbs。 现在我们将编写以下查询在 'dbs' 数据库中创建一个表 ![]() 然后,我们将使用 BEGIN / START TRANSACTION 命令开始我们的事务。 ![]() 现在,我们将插入 employee 表的记录。 ![]() 我们将执行 SELECT 查询以验证所有记录是否已成功插入 employee 表。 我们将得到如下表作为输出
我们将提交我们的事务以将所有更改永久保存到磁盘。 ![]() 现在,通过将 auto-commit 的值设置为 0 来关闭自动提交。 ![]() 然后我们将向 employee 表添加一条新记录。 ![]() 为了验证 insert 查询的结果,我们将再次使用 SELECT 查询。
之后,我们认为我们不需要之前插入的记录,即 ID 为 6 的记录。如我们所知,在插入 ID 为 6 的记录之前,我们已将包含五条记录的整个 employee 表通过 commit 命令存储到磁盘。 我们将执行 ROLLBACK 命令以恢复在执行 insert 命令之前保存的原始表。 ![]() 在 rollback 命令之后,我们需要执行 SELECT 命令来查看 employee 表的记录。
我们可以看到所有记录都恢复到了应用 insert 查询之前的状态。 下一个主题SQL Concatenate |
我们请求您订阅我们的新闻通讯以获取最新更新。