MySQL事务是确保数据一致性的核心机制,本质是一组原子性操作的集合。当多个SQL语句被包裹在START TRANSACTION与COMMIT之间,它们要么全部成功执行,要么全部回滚,绝不会出现中间状态。
AUTOCOMMIT默认开启,意味着每条独立的DML语句(INSERT/UPDATE/DELETE)都自动构成一个事务。若需手动控制,可执行SET autocommit = 0;此后所有DML均需显式调用COMMIT或ROLLBACK生效,直至重新启用AUTOCOMMIT。
COMMIT提交当前事务的所有变更,使其永久写入磁盘并对外可见;ROLLBACK则撤销未提交的所有修改,数据库恢复至事务开始前的状态。注意:DDL语句(如CREATE、ALTER)会隐式触发COMMIT,导致当前事务立即结束。
SAVEPOINT提供事务内的局部回滚能力。例如:SAVEPOINT sp1; INSERT …; SAVEPOINT sp2; DELETE …; ROLLBACK TO sp1; 这样可撤销sp1之后的操作,保留sp1前的变更,提升异常处理灵活性。
隔离级别直接影响并发表现:READ UNCOMMITTED允许读取未提交数据,有脏读风险;READ COMMITTED避免脏读,但可能不可重复读;REPEATABLE READ(MySQL默认)解决不可重复读,仍存幻读;SERIALIZABLE最严格,通过加锁实现串行化,性能最低。
实际开发中需权衡一致性与性能。电商下单场景建议用REPEATABLE READ,配合SELECT … FOR UPDATE锁定库存行,防止超卖;高并发日志类业务可降级为READ COMMITTED以减少锁竞争。
错误处理不能仅依赖事务回滚。应结合应用层异常捕获,在try-catch中判断SQLSTATE或错误码(如1205死锁错误),主动ROLLBACK并重试,避免连接长时间挂起或事务堆积。

建议图AI生成,仅供参考
善用SHOW ENGINE INNODB STATUS可查看当前锁等待与事务状态;INFORMATION_SCHEMA.INNODB_TRX表能实时监控运行中事务,及时发现长事务隐患——它可能阻塞DDL、膨胀undo日志,甚至拖垮整个实例。