mysql写入后,无法读取到数据问题

一,MySQL同一事务中先更新在查询,结果与数据库中不一致问题

 

问题背景:

java 代码在同一个事务中先执行update 再执行select 发现select 的数据是update之后的结果,此时事务还没有提交, 但直接查询数据库,数据库的数据还没有发生变更.

问题结论:

在数据库事务是指作为单个逻辑工作单元执行的一系列操作,要么完全地执行,要么完全地不执行,这是一种机制,用以维护数据库的完整性。在你这个事务单元中存在两个操作,一个是update,一个是select;你前面的update执行成功了,再执行select肯定能够查询到前面update的数据,因为你是在一个单元中。但是另外一个事务(即另一个单元)则不能select到这个update的数据,因为你update的数据还没提交,只在该单元中有效;

注意:此处要与脏读区分开,脏读所指的读到了未提交的数据(这是两个事务操作,而本文的问题前提是在同一个事务中)。也就是说,一个事务正在对一条记录做修改,在这个事务完成并提交之前,这条数据是处于待定状态的(可能提交也可能回滚),这时,第二个事务来读取这条没有提交的数据,并据此做进一步的处理,就会产生未提交的数据依赖关系。这种现象被称为脏读。

todo

思考:脏读,不同事物,不还是读了未提交的数据,与上面说的(但是另外一个事务(即另一个单元)则不能select到这个update的数据,因为你update的数据还没提交,只在该单元中有效;)不是存在冲突吗

----

以上问题为转载内容

二,不同事物,A事物,新增数据未提交,B事物,查询A事物新增的数据,结果:查不到数据

背景:

业务流程,先进行数据的写入,其他业务流程,需要查询前面写入的数据,结果未查到数据,导致流程中断,影响了业务流程

问题分析:

日志截图如下,可以看出写入与读取在毫秒级别,应该是新增事物未提交,查询事物无法查到

解决方案

读取重试,休眠500s

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值