StephenCur30 2020-04-14 18:02 采纳率: 0%
浏览 431
已结题

求助!!!Spring事务和mysql事务混淆

/**
*   账户B原来金额1350;mysql默认隔离级别:repeatable_read
**/
@Transactional
public void accountOperate(Long account) {
    // step1: 账户B金额加50
    accountDao.increase(Account.builder().accountName("B").accountNum(account).build());
    // step2: 读取账户B金额:accountNum = 1400
    Account account = accountDao.query((Account.builder().accountName("B").build()));
    // 系统抛出runtimeException,spring事务回滚;数据库账户B金额依旧为1350
    int a = 1 / 0;
}

Question:
1. step1中的代码执行完,数据库update操作到底有没有提交事务?
2. 若Step1中执行完数据库提交了事务账户B为1400,那后续spring事务回滚,数据库事务又做了哪些操作?(个人感觉这种假设不成立,因为DB一旦提交事务改变将永远保存在数据库,就没有之后的回滚的说法)
3. 若Step1中没有提交事务,那么step2中读取的数据1400属于Step1未提交数据,在mysql默认的隔离级别下是不允许赃读的,那这个1400又该如何解释?

  • 写回答

2条回答 默认 最新

  • dabocaiqq 2020-04-15 00:43
    关注
    评论

报告相同问题?

悬赏问题

  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 保护模式-系统加载-段寄存器