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 使用C#,asp.net读取Excel文件并保存到Oracle数据库
  • ¥15 C# datagridview 单元格显示进度及值
  • ¥15 thinkphp6配合social login单点登录问题
  • ¥15 HFSS 中的 H 场图与 MATLAB 中绘制的 B1 场 部分对应不上
  • ¥15 如何在scanpy上做差异基因和通路富集?
  • ¥20 关于#硬件工程#的问题,请各位专家解答!
  • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 截图中的mathematics程序转换成matlab
  • ¥15 动力学代码报错,维度不匹配