因为不同锁之间的兼容性关系,在有些时刻一个事务中的锁需要等待另一个事务中的锁释放它所占用的资源,这就是阻塞。
阻塞并不是一件坏事,其实为了确保事务可以并发且正常地运行。
在InnoDB存储引擎中,
参数innodb_lock_wait_timeout 用来控制等待时间(默认50秒); 动态参数,可随时调整
innodb_rollback_on_timeout 用来设置是否在等待超时时对进行中地事务进行回滚操作(默认是OFF,代表不回滚);静态地,不可在启动时进行修改
默认情况下InnoDB存储引擎不会回滚超时引发地错误异常。
innodb_rollback_on_timeout=on的情况下,整个事务已经自动回滚,不会再自动创建事务。
所以不管是5.6的版本还是5.7的版本,innodb_rollback_on_timeout最好设置成ON,这样可以避免破坏事务原子性,保证数据一致性。唯一的区别是在5.7版本下需要自己手动开启一个事务。