MySQL中出现Lock wait timeout exceeded错误时事务会自动回滚吗?
MySQL锁等待超时(ERROR 1205)后的事务回滚机制
当触发ERROR 1205 (HY000): Lock wait timeout exceeded; try restarting transaction错误时,当前事务不会自动回滚,必须手动执行ROLLBACK;语句来完成事务回滚。
关键细节:
- InnoDB引擎在锁等待超时后,仅会终止当前正在执行的SQL语句,不会主动回滚整个事务。此时事务仍处于活跃状态,未提交的修改会保留在事务上下文里。
- 如果不手动回滚,后续继续执行事务内的操作或尝试提交,可能引发数据不一致,或是再次触发锁相关错误。
建议操作:
- 遇到该错误后,优先执行
ROLLBACK;清理未提交的事务状态,再排查锁冲突原因(比如长事务、锁粒度不合理等),之后再重新执行业务逻辑。 - 若需调整锁等待时长,可修改
innodb_lock_wait_timeout参数,但这只是临时缓解方案,核心还是优化事务设计,减少锁持有时间。
内容的提问来源于stack exchange,提问作者Super Kai - Kazuya Ito
相关产品推荐
相关产品推荐

