事务是确保数据库数据一致性的核心机制。在MySQL中,事务通过ACID特性(原子性、一致性、隔离性、持久性)保障多条SQL语句作为一个不可分割的整体执行或回滚。
默认情况下,MySQL的InnoDB存储引擎启用自动提交(autocommit=1),即每条DML语句独立成一个事务。若需手动控制,可通过SET autocommit = 0临时关闭,并使用BEGIN或START TRANSACTION显式开启事务块。

AI绘图结果,仅供参考
COMMIT用于确认并永久保存事务中的所有更改;ROLLBACK则撤销自事务开始以来的所有未提交操作。两者必须在同一个会话内执行,跨连接无效。注意:DDL语句(如CREATE、ALTER)会隐式触发COMMIT,导致当前事务立即结束。
隔离级别决定事务间可见性。MySQL默认为REPEATABLE READ,可避免脏读与不可重复读;READ COMMITTED适合高并发读场景;SERIALIZABLE提供最强一致性但显著降低并发性能;READ UNCOMMITTED极少使用,因允许脏读。
合理设置超时能防止长事务阻塞系统。通过innodb_lock_wait_timeout(默认50秒)控制行锁等待时长,超时后返回Lock wait timeout exceeded错误;innodb_rollback_on_timeout则决定是否在锁超时后自动回滚整个事务(5.6+默认OFF,仅中断当前语句)。
避免在事务中执行耗时操作(如文件读写、远程调用、复杂计算),以防锁持有过久。优先将SELECT前置,DML集中执行,并尽量缩短事务边界——越早COMMIT或ROLLBACK,系统资源释放越及时。
错误处理需显式覆盖。即使SQL语句失败,MySQL不会自动回滚已执行的前序操作。应用层应监听错误码(如1205死锁、1213锁等待超时),在捕获异常后主动调用ROLLBACK,并记录上下文以便排查。
审计与可观测性不可忽视。启用general_log或slow_query_log可追踪事务执行路径;performance_schema.tables和INFORMATION_SCHEMA.INNODB_TRX视图支持实时监控活跃事务、锁等待与运行时长,帮助识别潜在瓶颈。