事务通过ACID特性确保数据一致性,使用START TRANSACTION开启,COMMIT提交,ROLLBACK回滚,需关闭autocommit以手动控制,仅InnoDB支持,配合保存点可实现部分回滚,适用于金融等关键业务场景。

在 MySQL 中,事务用于确保一组数据库操作要么全部成功执行,要么全部不执行,从而保证数据的一致性和完整性。事务具有 ACID 特性(原子性、一致性、隔离性、持久性),常用于处理涉及多表或多步骤的关键业务逻辑。
开启事务
使用 BEGIN 或 START TRANSACTION 来显式开启一个事务:
START TRANSACTION;
-- 或者
BEGIN;
提交事务
当所有 SQL 语句执行成功后,使用 COMMIT 将更改永久保存到数据库:
COMMIT;
例如:
START TRANSACTION;
UPDATE account SET balance = balance - 100 WHERE user_id = 1;
UPDATE account SET balance = balance + 100 WHERE user_id = 2;
COMMIT;
回滚事务
如果中间出现错误或需要取消操作,可以使用 ROLLBACK 回退到事务开始前的状态:
ROLLBACK;
从一个Perl爱好者到一个Perl程序员。《Intermediate Perl》将教您如何把Perl作为编程语言来使用,而不仅只是作为一种脚本语言。 Perl是一种灵活多变、功能强大的编程语言,可以应用在从系统管理到网络编程再到数据库操作等很多方面。人们常说Perl让容易的事情变简单、让困难的事情变得可行。《Intermediate Perl》正是关于如何将技能从处理简单任务跃升到胜任困难任务的书籍。 本书提供对Perl中级编程优雅而仔细的介绍。由畅销的《学习Perl》作者所著,本书提供了《学习P
例如:
START TRANSACTION;
INSERT INTO orders (user_id, amount) VALUES (1, 200);
UPDATE inventory SET stock = stock - 1 WHERE item_id = 10;
-- 假设库存不足,触发异常
ROLLBACK;
自动提交模式
MySQL 默认开启自动提交(autocommit = 1),即每条 SQL 语句都会被立即提交。要手动控制事务,需关闭自动提交:
SET autocommit = 0;
关闭后,所有语句将在当前事务中执行,直到遇到 COMMIT 或 ROLLBACK 才会结束事务。
事务的注意事项
- 事务只对支持事务的存储引擎有效,如 InnoDB。MyISAM 不支持事务。
- 避免长时间持有事务,否则可能导致锁等待或性能下降。
- 在应用程序中建议结合 try-catch 使用事务,出错时进行回滚。
- 可设置保存点(SAVEPOINT)实现部分回滚:
SAVEPOINT sp1;
-- 执行某些操作
ROLLBACK TO sp1;
基本上就这些。合理使用事务能有效保障数据安全,特别是在处理金融交易、订单系统等场景中尤为重要。









