MySQL 8.4 Release Notes
17.20.5 InnoDB 错误处理
以下内容描述了InnoDB
的错误处理机制。InnoDB
有时只回滚失败的语句,其他时候回滚整个事务。
-
如果在表空间中运行出错,MySQL将出现
Table is full
错误,并回滚SQL语句。 -
事务死锁会导致
InnoDB
回滚整个事务。在这种情况下,重新执行整个事务。锁等待超时会导致
InnoDB
回滚当前语句(即遇到超时的语句)。如果启用--innodb-rollback-on-timeout
,则整个事务将回滚。否则,如果使用默认行为,可以重新执行语句;如果启用--innodb-rollback-on-timeout
,则整个事务将回滚。在繁忙服务器上,死锁和锁等待超时都是正常情况,应用程序需要了解这些情况可能会发生,并通过重试来处理它们。您可以通过尽量少地工作,以最短的时间持有锁定,并锁定最小的行数来使其更不可能发生。有时候,将工作分配到不同的事务中可能是实用的和有帮助的。
-
如果未指定
IGNORE
选项,您的SQL语句将在遇到重复键错误时回滚。 -
row too long error
也会导致SQL语句回滚。 -
其他错误主要是由MySQL代码层面检测的(在
InnoDB
存储引擎级别以上),它们将回滚相应的SQL语句。锁定不会在单个SQL语句回滚时释放。
在隐式回滚和执行明确ROLLBACK
SQL 语句时,SHOW PROCESSLIST
在相关连接的State
列中显示Rolling back
。