使用START TRANSACTION开启事务,执行SQL操作后通过COMMIT提交或ROLLBACK回滚,确保数据一致性,适用于转账等场景,需注意控制事务长度以减少锁竞争。

MySQL事务处理是确保数据一致性和完整性的关键机制。当你执行一系列数据库操作时,事务可以保证这些操作要么全部成功,要么全部失败回滚,避免出现中间状态的数据错误。
开启事务
在MySQL中,默认情况下每条SQL语句都是自动提交的(autocommit = 1)。要手动控制事务,必须先关闭自动提交模式或显式开始一个事务。
- 使用 START TRANSACTION; 显式开启一个事务块
- 也可以用 BEGIN; 或 BEGIN WORK;,效果相同
- 设置 SET autocommit = 0; 可关闭当前会话的自动提交功能
执行事务中的操作
在事务开启后,执行的INSERT、UPDATE、DELETE等操作不会立即生效,而是暂存于当前事务上下文中。
- 例如:
UPDATE accounts SET balance = balance - 100 WHERE id = 1;
UPDATE accounts SET balance = balance + 100 WHERE id = 2; - 这些更改对其他会话不可见,直到事务提交
提交事务
当所有操作都正确执行后,使用COMMIT命令将更改永久保存到数据库。
- 执行 COMMIT; 提交事务,所有修改写入磁盘
- 一旦提交,无法通过ROLLBACK回退
- 提交后,事务结束,系统自动进入下一个事务状态(如果autocommit=1)
回滚事务
如果过程中发生错误或需要取消操作,可使用ROLLBACK撤销所有未提交的更改。
- 执行 ROLLBACK; 或 ROLLBACK WORK;
- 所有在事务中做的修改都会被丢弃
- 数据库恢复到事务开始前的状态
基本上就这些。合理使用START TRANSACTION、COMMIT和ROLLBACK,能有效管理数据变更过程,尤其在转账、订单处理等场景中至关重要。注意事务不宜过长,避免锁资源占用太久影响并发性能。










