1、使用Mybatis的事务和MySql的事务是一样的,如果Mybatis中启动了事务,同样会锁行或者锁表(如果索引行没有命中就会锁表),此时在锁住的情况下在Mysql中去更新被锁住的行,那么会在获取锁超时时间过后抛出异常。
Mysql中默认获取锁超时时间为50秒
Mybatis中执行 update business_transaction_result set transaction_id = '123' where id = 20;
然后线程轮询12秒不要往下走
在Mysql中执行 update business_transaction_result set transaction_id = '456' where id = 20;
可以看到在3秒后mysql抛出了异常
- 查看Mysql获取锁超时时间的配置:SHOW VARIABLES LIKE 'innodb_lock_wait_timeout';
- 设置全局超时时间:set global innodb_lock_wait_timeout = 12;
- 设置会话超时时间:set session innodb_lock_wait_timeout = 12;
2、Mysql中手动提交事务
set autocommit = 0;
begin;
update business_transaction_result set transaction_id = '456' where id = 20;
commit;