MySQL 9.0 发行说明
以下各项描述了 InnoDB 如何执行错误处理。InnoDB 有时只回滚失败的语句,有时会回滚整个事务。
如果 表空间 中的磁盘空间不足,则会发生 MySQL
表已满错误,并且InnoDB会回滚 SQL 语句。事务 死锁 会导致
InnoDB回滚 整个 事务。发生这种情况时,请重试整个事务。锁等待超时会导致
InnoDB回滚当前语句(正在等待锁并遇到超时的语句)。要回滚整个事务,请在启用--innodb-rollback-on-timeout的情况下启动服务器。如果使用默认行为,则重试语句;如果启用了--innodb-rollback-on-timeout,则重试整个事务。死锁和锁等待超时在繁忙的服务器上都很常见,应用程序必须意识到它们可能会发生,并通过重试来处理它们。您可以通过在事务期间第一次更改数据和提交之间尽可能少地工作来降低它们发生的可能性,以便在尽可能短的时间内和尽可能少的行上保持锁。有时,在不同的交易之间分配工作可能是切实可行和有益的。
如果在语句中没有指定
IGNORE选项,则重复键错误会回滚 SQL 语句。行过长错误会回滚 SQL 语句。其他错误主要由 MySQL 代码层(在
InnoDB存储引擎级别之上)检测到,它们会回滚相应的 SQL 语句。单个 SQL 语句的回滚不会释放锁。
在隐式回滚期间,以及在执行显式 ROLLBACK SQL 语句期间,SHOW PROCESSLIST 会在相关连接的 State 列中显示 正在回滚。