Documentation Home
MySQL 8.3 Reference Manual
Related Documentation Download this Manual
PDF (US Ltr) - 40.8Mb
PDF (A4) - 40.9Mb
Man Pages (TGZ) - 294.0Kb
Man Pages (Zip) - 409.0Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb
Excerpts from this Manual

MySQL 8.3 Reference Manual  /  ...  /  InnoDB Error Handling

17.20.5 InnoDB 错误处理

以下项目描述了 InnoDB 如何执行错误处理。 InnoDB 有时回滚失败的语句,有时回滚整个事务。

  • 如果在 表空间 中耗尽文件空间,会出现 MySQL 表已满 错误,并且 InnoDB 会回滚 SQL 语句。

  • 事务 死锁 导致 InnoDB 回滚整个 事务。出现这种情况时,请重试整个事务。

    锁等待超时导致 InnoDB 回滚当前语句(等待锁并遇到超时的语句)。要使整个事务回滚,请启用 --innodb-rollback-on-timeout 选项。使用默认行为时,请重试语句;如果启用 --innodb-rollback-on-timeout,请重试整个事务。

    死锁和锁等待超时都是繁忙服务器上的正常情况,应用程序需要意识到它们可能发生并处理它们,通过重试。您可以通过在事务中尽量减少工作量和锁定的行数来减少它们的可能性,从而减少锁定的时间。

  • 重复键错误回滚 SQL 语句,除非您在语句中指定了 IGNORE 选项。

  • 行太长错误回滚 SQL 语句。

  • 其他错误主要由 MySQL 层代码(在 InnoDB 存储引擎级别以上)检测,并回滚相应的 SQL 语句。在单个 SQL 语句回滚时,不释放锁。

在隐式回滚期间,以及在执行明确的 ROLLBACK SQL 语句时,SHOW PROCESSLISTState 列中显示 Rolling back 相关连接。