14.3.5.2 Deadlock Detection and Rollback 死锁检测和回滚:
InnoDB 自动检查四艘,回滚一个事务或者事务来打破死锁。
InnoDB 试图选择小的事务来回滚, 事务的大小是由 插入 修改 或者删除的记录数决定
InnoDB 知道 表锁 如果 innodb_table_locks = 1 (the default) ,autocommit = 0
MySQL layer 上面只是关于 row-level locks.
否则,InnoDB 不能检测到死锁 当表锁设置通过MYSQL LOCK TABLE 语句
或者通过存储引擎设置
解决那些情况通过设置innodb_lock_wait_timeout 系统变量
当InnoDB 执行一个完整的事务回滚,事务上设置的所有锁都被释放。
然而, 如果只是单个的SQL语句被回滚作为一个错误结果,
一些通过语句设置的锁可能被保持
这个发生因为InnoDB 存储 row locks以这样一种格式
如果一个SELECT 调用一个函数在事务里, 函数中的语句失败, 语句回滚。 此外,
如果ROLLBACK 被执行在那之后,整个事务回滚