小心MySQL这个配置可能会让你事务部分提交!!

1、官方定义

innodb_rollback_on_timeout

InnoDB rolls back only the last statement on a transaction timeout by default. If --innodb-rollback-on-timeout is specified, a transaction timeout causes InnoDB to abort and roll back the entire transaction.

官方解释当出现事务等待超时 参数innodb_rollback_on_timeout=off的时候,只会回滚最后一条语句,只有当innodb_rollback_on_timeout=on时才会回滚整个事务。

接下来我们来做实验印证这个问题

2、验证

查看参数innodb_rollback_on_timeout = off

先将innodb_lock_wait_timeout 设小点,避免长时间的等待

set innodb_lock_wait_timeout = 10;