在MySQL中使用
ROLLBACK回滚事务,是为了撤销在一个事务中执行的所有未提交的更改。这在发生错误或需要取消操作时非常有用。要正确使用
ROLLBACK,必须确保表使用支持事务的存储引擎,比如InnoDB。
启用事务
MySQL默认处于自动提交模式(autocommit = 1),这意味着每条SQL语句都会被立即提交。要使用事务,必须先关闭自动提交:
START TRANSACTION; —— 显式开始一个事务 或使用 BEGIN; (效果相同)例如:
START TRANSACTION;
执行SQL操作
在事务开启后,执行的INSERT、UPDATE或DELETE等操作不会立即生效,而是暂存于当前事务中。
UPDATE accounts SET balance = balance - 100 WHERE user_id = 1; UPDATE accounts SET balance = balance + 100 WHERE user_id = 2;
假设第二个更新出错或业务逻辑判断需要取消转账,就可以回滚。
使用ROLLBACK回滚
调用
ROLLBACK;语句可撤销自事务开始以来所有未提交的更改:
ROLLBACK;
执行后,上述两条UPDATE操作将全部失效,数据恢复到事务开始前的状态。
如果确认操作无误,则应使用:
COMMIT;
将更改永久保存。
实际应用场景示例
模拟银行转账:
START TRANSACTION; <p>UPDATE accounts SET balance = balance - 500 WHERE user_id = 1; UPDATE accounts SET balance = balance + 500 WHERE user_id = 2;</p><p>-- 假设发现用户2账户异常,取消操作 ROLLBACK;</p><p>-- 此时两条更新都被撤销</p>
如果不执行
ROLLBACK而执行
COMMIT,更改才会真正写入数据库。
基本上就这些。只要记得开启事务、出错时回滚、正确时提交,就能有效控制数据一致性。注意MyISAM引擎不支持事务,务必使用InnoDB。
