在InnoDB中错误处理不像SQL标准中指定的一样。按照标准,在SQL语句过程中的任何错误应该导致该语句的 回滚。InnoDB有时仅回滚部分语句,或者整个事务。下列条目叙述InnoDB如何执行错误处理:
· 如果你耗尽表空间中的文件空间,你使得MySQL表完全错误,并且InnoDB返回SQL语句。
· 一个事务死锁导致InnoDB回滚整个事务,在锁定等待超时的情况,InnoDB仅回滚最近的SQL语句。
当一个事务回滚因为死锁或锁定等待超时而发生,它在事务中撤销语句的作用。但是如果事务是用START TRANSACTION或BEGIN语句开始的,它就不撤销该语句。进一步,SQL语句变成事务的一部分直到COMMIT, ROLLBACK或者导致暗地提交的SQL语句发生。
· 如果你没有在语句中指定IGNORE选项,重复键错误回滚SQL语句。
· 行太长错误回滚SQL语句。
· 其它错误主要被代码的MySQL层(在InnoDB存储引擎级别以上)探测,它们回滚相应的SQL语句。在单个SQL语句中的回滚中锁定不被释放。
在暗地回滚过程中,就像在一个明确的ROLLBACK SQL命令的执行过程中一样,SHOW PROCESSLIST在State列为有关的连接显示Rolling back。