总结:Mysql事务的隔离级别

事务的并发问题:

数据脏读:
【定义:】
(1)说法一:指在一个事务处理过程里读取了另一个未提交的事务中的数据,读取数据不一致。
(2)说法二:指事务A对数据进行增删改操作,但未提交,另一事务B可以读取到未提交的数据,如果这个时候事务A回滚了,则第二个事务B读取的就是脏数据了。
【说明:】当一个事务正在多次修改某个数据,而在这个事务中多次的修改都还未提交,这个时候一个并发的事务来访问该数据,就会造成两个事务得到数据不一致。
【举例:】
用户A向用户B转账100,对应一条给B加100的sql操作, 同时还有一条给A减100的sql操作,如果这个场景中,如果已经执行了给B用户加100,而给A减100的sql操作并没有开始开始执行,那么如果这个时候A告诉B钱已经转过去了,这个时候B去查看金额的时候也确实发现金额已经变了,但是其实事务还没有提交,如果给A扣钱的时候有问题这个事务回滚,那么其实B的钱没有多100,而在事务未提交B看到的数据就是脏读产生的。

不可重复读
【定义:】
(1)说法一:是指对于数据库中的某个数据,一个事务范围内多次查询却返回了不同的数据值,这是由于在查询间隔中,被另一个事务修改并成功提交了。
(2)说法二:一个事务A中发生了两次读操作,第一次读操作和第二次读操作之间,另一个事务B对数据进行了修改,这时两个事务读取的数据不一致。
【举例:】
如果事务T1在读取某一个数据,而事务T2立马修改了这个数据并且提交事务给数据库,事务T1再次读取这个数据的时候发生结果已经不一样了,发生了不可重复读。

虚读【也叫幻读】
【定义:】是事务非独立执行时发生的一种假象。
【说法2:】第一个事务A对一定范围的数据进行批量修改,第二个事务B在这个范围又加了一条新数据,这样就造成了事务A丢失了对这条新数据的修改。
【举例:】
数据库管理想把用户表中的所有人的密码都改成默认密码,噼里啪啦修改,这个时候来了个新员工,人力不知道管理员在更新数据,开始录入这个员工信息,员工信息的密码当然是以前的旧密码,,费了老大劲管理员修改完了,然后去查看自己的修改成果,结果发现了还有一条信息没有修改。这就造成了虚读。

【关于脏读和不可重复读】
脏读是某一个事务读取了另一个事务未提交的脏数据,而不可重复读就是正好读取了前一个事务提交的数据。
注意:在有些场景下,有些数据需要实时修改,而用户读取数据的时候以最近更新的数据为准,这个时候不可重复读就不是问题。
但是有些情况下,比如A读取了某一个数据,然后按照这个读取的数据很辛苦的分析了一个东西出来,而B读取的时候,另一个事务修改了刚才A读取的数据,那么B按照它读取的内容也分析了一个东西出来,等到开会的时候,公说公有理,婆说婆有理,最后可能打起来。

Mysql数据库的四种隔离级别:

①:Serializable(可串行):可避免脏读、不可重复读、虚读的发生。
②:Repeatable read(可重复读):可避免脏读,不可重复读的发生。
③:Read committed(读已提交):避免脏读的发生。
④:Read uncommitted(读未提交):最低级别,任何情况都无法保证。

注意
不可重复读和虚读都是读取了一个已经提交了的事务的结果,这一点就脏读不同。
不可重复读和虚读他们二者的区别是:不可重复读读取的都是同一个数据,而虚读是针对的是一批数据整体。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值