求助!!!Spring事务和mysql事务混淆 5C
/**
*   账户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个回答

首先你这更新和查询操作是在同一个事务里面,事务具有完整性,要么全部成功,要么都失败;那么只要你更新数据成功了,那就肯定可以查到前面的更新的数据;但这种你在另一个事务里面就读不到他还未提交的更新数据了

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐