为了恢复作为给定事务的一部分所做的所有更改,执行 ROLLBACK 命令。这将导致还原与事务相关的更改。
ROLLBACKS 通常在事务执行期间观察到/发生错误时应用。
让我们看一个使用 ROLLBACK 命令的示例。
我们将使用相同的交易借记 ACC1,贷记 ACC2,资金为 100 美元
START TRANSACTION; --statement1
UPDATE bankaccounts SET funds=funds-100 WHERE accountno='ACC1'; --statement2
UPDATE bankaccounts SET funds=funds+100 WHERE accountno='ACC2'; --statement3
ROLLBACK; --statement4
您可以看到我们刚刚将 COMMIT 语句替换为 ROLLBACK。
执行完所有这些语句后,如果您运行 SELECT 查询,您会发现基金余额没有任何变化,因为我们已经回滚了交易所做的更改。
在处理事务时,了解 MySQL 会话变量AUTOCOMMIT的使用很重要
MySQL 默认情况下将 AUTOCOMMIT 设置为 true,这意味着每个单独的语句都作为其自己的事务执行并自动提交/应用。
假设您正在运行一个正常的 SELECT 查询,如下所示:
从银行账户中选择 *;
启用自动提交后,此语句将执行为:
START TRANSACTION; SELECT * FROM bankaccounts; COMMIT;
当我们显式处理事务并在“START TRANSACTION”块内指定语句时,自动提交将关闭。应提交或回滚更改,以便分别应用或恢复事务。
要更新此属性,您可以简单地使用“SET”关键字。例如,要将 AUTOCOMMIT 设置为 OFF,您可以使用 2 个语句中的任何一个
SET AUTOCOMMIT = 0 SET AUTOCOMMIT = OFF
为了获取 AUTOCOMMIT 变量的值,可以使用以下命令:
显示变量,如“自动提交”;