mysql事务的并发带来的问题

事务并发带来的问题有4种

更新丢失:两种事务同时修改操作,前者事务的修改操作覆盖了后者事务的修改操作,导致后者的数据更新丢失

脏读:两种事务在不同的时间里,前者事务未提交的修改信息,后者事务中会读到。

不可重复:两种事务前者提交后的修改操作,后者事务会读到

幻读:事务在同一事务的不同时间内,可以读取到其它事务修改的内容。

事务的隔离等级

读未提交   可以读到其他事务未提交的数据

读已提交   可以读到其他事务已提交的数据

可重复的    同一事务的不同时间内读到的数据是一样的

串行的        依次执行的

我们来看每个隔离等级,分别有哪些并发时所带来的问题,就其中一个隔离等级而言,如:可重复的(这是mysql8默认的隔离等级)。举个例子:

 用cmd和navicat分别操作相同的数据库,准备用来演示两种事务。

现在是事务之前,两边看到的数据都是相同的,money都是3000。

正常情况下,根据概念:同一事务的不同时间内读到的数据是一样的。但是,这种情况只发生在本事务第一次查询的数据,并且本事务不做其他修改数据的操作,这样查询的数据一直是第一次查询的数据。

图解:

依图所见两边都开启事务之后,左边先查询了一次,查询到的数据是第一次查询的数据,右边修改数据之后,左边再查询,就依然是第一次查询的数据。

 依图所见,即使右边提交了事务,左边查询的数据依旧没改变

依图所见,直到左边提交事务后再查询才会看到修改后的数据。

 据上情况,确实可以看出同一事务的不同时间内读到的数据是一样的。

根据上面所提到的这种情况只发生在本事务第一次查询的数据,并且本事务不做其他修改数据的操作,这样查询的数据一直是第一次查询的数据。

还是刚开始的,开启事务之前,左边,右边查询的数据都是3000

 

两边开启事务,右边最先修改数据,并且提交,左边查询还是3000,右边就是正常的2990,现在还是符合同一事务的不同时间内读到的数据是一样的。

那么,左边再修改数据是依据3000还是右边提交后的2990呢?

依图所见,是依据的是2990,所以总结:一个事务可以读取到其它事务所修改的内容。只不过需要通过本事务的修改数据操作来体现,符合事务并发带来的问题中的幻读问题

最后提一句:不同事务,只有一个事务能修改数据,其它事务必须等到该事务提交事务才能再修改数据。

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值