针对mysql-InnoDB引擎讨论本文
可串行化事务 serializable 是事务的最高级别,在每个读数据上加上锁
比如A事务使用了 serializable 隔离级别,只查询数据,那么B事务这个时候如果要update相同数据,则必须等待A事务完成。
串行化事务中,读锁被获取后,写锁需要等待
代码演示1:
// 设置当前事务级别,这种作用域为 session 级别
@Transactional(isolation = Isolation.SERIALIZABLE)
@RequestMapping("/tx")
public void tx() throws InterruptedException {
// 查询数据库
id = "123456";
accountMapper.selectAccount(id);
TimeUnit.SECONDS.sleep(5);
}
@RequestMapping("/updateAccount")
public void updateAccount(){
id = "123456";
accountMapper.updateAccountById