以下项目描述了如何InnoDB
执行错误处理。InnoDB
有时只回滚失败的语句,有时回滚整个事务。
如果表空间中的文件空间 不足,则会发生MySQL
Table is full
错误并InnoDB
回滚 SQL 语句。事务死锁 导致回滚整个 事务。
InnoDB
_ 发生这种情况时重试整个事务。锁等待超时导致
InnoDB
回滚当前语句(等待锁并遇到超时的语句)。要使整个事务回滚,请在--innodb-rollback-on-timeout
启用的情况下启动服务器。--innodb-rollback-on-timeout
如果使用默认行为,则重试语句;如果启用 ,则重试整个事务 。死锁和锁等待超时在繁忙的服务器上都是正常的,应用程序有必要意识到它们可能发生并通过重试来处理它们。您可以通过在事务期间对数据的第一次更改和提交之间做尽可能少的工作来降低它们的可能性,因此锁定的时间尽可能短,行数也尽可能少。有时在不同事务之间拆分工作可能是实用且有帮助的。
IGNORE
如果您未在语句中指定该选项 ,则重复键错误会回滚 SQL语句。A
row too long error
回滚 SQL 语句。其他错误大多由MySQL代码层(
InnoDB
存储引擎层以上)检测到,并回滚相应的SQL语句。单个 SQL 语句的回滚不会释放锁。
在隐式回滚期间,以及在执行显式
ROLLBACK
SQL 语句期间,SHOW PROCESSLIST
显示Rolling back
在
State
相关连接的列中。