MySQL已经插入了一条数据,但是再查询的时候查不出来的原因_JianfeiMa的博客-CSDN博客_mysql表里有数据却查不出来
(Me:直接把这条insert数据完整信息作为参数传递下去,而不是通过id重新查出)
其他事务新增的能读呢?——是否会幻读,跟隔离级别有关,RR级别会幻读吗?本来会,但innodb通过mvcc解决了
MySQL事务(脏读,幻读,不可重复读)_意Ω外的博客-CSDN博客_mysql事务脏读
https://www.jianshu.com/p/10597feca846?ivk_sa=1024320u
认为spring mybatis insert了但离该数据实际刷到磁盘还有时间差(Me:还在mysql内存,还没落到磁盘,所以立马查查不出,存疑,我是觉得又不是异步的,肯定Mysql执行完了[存好了],mybatisplus代码才下一步的吧,比如返回数据会自动设置上主键。又说“猜测可能是事务提交后,数据还没有落到磁盘,所以无法直接从数据库mysql 表中查询”。线上这个代码没加事务,实际应该还是代码逻辑引起的,它是大量for循环去掉insert,那么另一个线程去查,可能此时for的最后几个insert还没进行呢~)
[Me:若是更新update,倒是会有x锁,所以别人读也会阻塞?而且是当前读,不存在取不到最新的可能(有x锁、两阶段锁协议,真是把事情简化了很多,砍掉了很多讨论情况)]
杂谈:mysql默认情况下@autocommit的值为1。所以只写insert也是有mysql的事务的。那么,Spring @Transaction是怎么实现把一堆默认会有事务的操作,整成一个事务使得整体原子性?我猜测该注解的原理应该包含:暂时去除自动提交,切面帮助加上事务语句。
这方法不好(睡2秒有些太傻批了),还是分开,一个加事务(变为原子性,最后commit),让另一个方法要么读不到(“服务器繁忙稍后再试”),要么能读到所有