在一个事务中,先执行保存,再执行查询,可以查询到上一步保存的数据吗?

在同一个事务中,保存数据后可以立即查询到新数据,这是因为事务的原子性确保了操作的可见性,但实际提交还需等待事务结束。如果事务失败,未提交的变更会被回滚,以维护数据一致性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

是的, 在同一个事务内,先保存后查询可以查询到刚刚保存的数据。

例如:

java
@Transactional
public void process() {

  // 保存数据
  userRepository.save(user);
  
  // 查询刚才保存的数据
  User u = userRepository.findByUserId(user.getId());

}

事务的原子性并不意味着事务内的操作只有在整个事务完成后才能看到效果。

事务的原子性是指一个事务里的所有操作要么全部成功,要么全部失败,它不可能只执行其中的一部分操作。但这并不意味着事务内的操作之间是独立的,无法看到对方的执行结果。事务提交前,各个操作对数据库的 change 是可见的,只是还没有最终提交。

查询可以看到未提交的变化。所以在一个事务内:

- 保存数据后,可以立即查询到刚保存的数据,不需要等整个事务结束。

- 这保证了事务内各操作之间的数据一致性。- 要真正提交到数据库还需等整个事务成功结束。

- 如果事务失败,对数据库的未提交 change 会通过回滚而取消。

综上,事务的原子性是保证所有操作同时成功或失败,而不是隔离操作。所以一个事务中的查询可以看到同事务的未提交更新。这也是保持Isolation的需要。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

隆里卡那唔

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值