当前位置 博文首页 > 文章内容

    springboot之事务

    作者: 栏目:未分类 时间:2020-09-01 18:01:09

    本站于2023年9月4日。收到“大连君*****咨询有限公司”通知
    说我们IIS7站长博客,有一篇博文用了他们的图片。
    要求我们给他们一张图片6000元。要不然法院告我们

    为避免不必要的麻烦,IIS7站长博客,全站内容图片下架、并积极应诉
    博文内容全部不再显示,请需要相关资讯的站长朋友到必应搜索。谢谢!

    另祝:版权碰瓷诈骗团伙,早日弃暗投明。

    相关新闻:借版权之名、行诈骗之实,周某因犯诈骗罪被判处有期徒刑十一年六个月

    叹!百花齐放的时代,渐行渐远!



    1单机事务   

    A-->B  用户表、账户表、订单表都在一个mysql中

    A转账给B,那么正常情况下A账户减钱,B账户加钱,如果A减钱成功,B账户加钱失败,那么A账户也要减少钱失败

    2分布式事务

    分布式事务处理通过二次提交,需要保证数据的一致行

    3事务的隔离机制

    Serializable: 串行处理,消耗资源,最高的事务隔离级别,在该级别下,事务串行化顺序执行,可以避免脏读、不可重复读与幻读。但是这种事务隔离级别效率低下,比较耗数据库性能,一般不使用

    例如:A转给B100万,发现转错了,A不能找B要回这100W,只能等着B获取100W后再去协商

    Read uncommitted(读未提交):一个事务可以提取读取另外一个未提交的事务的数据

    例如:A要转给B100万,发现转错了,B还没有获取到这100W,A可以要求将这笔钱转回去

    Read committed (读提交):  一个事务要等另一个事务读取之后才能提交事务

    例如:A要转给B100万,B看见A的卡里有100万,很高兴,但是C急用钱,将A的100万转走了,那么A无法转给B  100W

    若有事务对数据进行更新(UPDATE)操作时,读操作事务要等待这个更新操作事务提交后才能读取数据,可以解决脏读问题。但在这个事例中,出现了一个事务范围内两个相同的查询却返回了不同数据,这就是不可重复读。

    Repeatable read(重复读):开始读取数据(事务开启)时,不再允许修改操作

    例如:A要转给B100万,B看见A的卡里有100万,很高兴,C急用钱,想要将A的100万转走,但是不行,因为钱已经先要转给B了

    重复读可以解决不可重复读问题,但是可能还会有幻读问题。因为幻读问题对应的是插入INSERT操作,而不是UPDATE操作

    幻听:A转给B100万,B看见账户就是100W,这个时候,A又给B转了20万,那么B去查,发现账户是120W,这就是幻听,可以通过序列化解决