MySQL 8.3 Release Notes
以下项目描述了 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 PROCESSLIST
在 State
列中显示 Rolling back
相关连接。