标准答案
- 自动提交适合单条已能表达完整不变量的 INSERT、UPDATE 或 DELETE,例如带条件的库存扣减。
- 显式事务适合必须共同成功的多步本地写入,例如创建订单、写订单明细和写审计记录。
- 事务内的每条读写都应服务于同一个业务原子单元,避免把不相关操作绑在一起。
- 频繁单条提交会增加日志刷盘与网络往返,批量写入可降低开销,但批次大小要受锁、日志和恢复能力约束。
- 事务异常时必须明确 rollback、连接归还和错误传播,不能让连接带着未完成事务回到池中。
题目解析
显式事务的价值是让失败可预测,而不是越大越好。一组操作若能用单条原子 SQL 完成,往往比先读后写的事务更短、更容易扩展。
框架的默认自动提交经常让开发者误以为“加了 begin 才有一致性”。实际应检查每个 DAO、ORM flush 和异常路径是否真的处在同一事务上下文。
常见误区
- 多条相关写入依赖默认自动提交,第二条失败后留下半完成业务数据。
- 开启显式事务后忘记提交或回滚,连接池复用时污染后续请求。