文档主页
MySQL 8.4 参考手册
相关文档 下载本手册
PDF (US Ltr) - 39.9Mb
PDF (A4) - 40.0Mb
手册页 (TGZ) - 258.5Kb
手册页 (Zip) - 365.5Kb
信息 (Gzip) - 4.0Mb
信息 (Zip) - 4.0Mb


MySQL 8.4 参考手册  /  ...  /  InnoDB 错误处理

17.20.5 InnoDB 错误处理

以下各项描述了 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 会在相关连接的 状态 列中显示 正在回滚