吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1927|回复: 6
收起左侧

[其他转载] MYSQL事务·并发事务的三大问题

[复制链接]
阿里灵灵 发表于 2021-7-20 11:44
本帖最后由 阿里灵灵 于 2021-7-22 11:23 编辑

脏读

  • 定义:一个事务正在对一条记录做修改,在这个事务完成并提交之前,这条数据是处于待定状态的(可能提交也可能回滚),也就是说数据并没有最终确定下来。这时,第二个事务来读取这条没有提交的数据,并据此做进一步的处理的各类操作,被称为脏读。

举个例子,

事务脏读.png

步骤一:事务A修改变量a的值为2。

步骤二:事务B读取变量a的值。这个时候,由于事务A已经提前把变量a改为2了,所以事务B读到的值就有可能是2。

这时候就有一个问题,如果事务A在提交事务之前,程序发生了异常,导致事务A进行了回滚,变量a的值就会恢复为1。但是事务B已经获取数值为2了,并且用这个错误数据进行后面的操作。

而以上类似的情况就称为脏读。

不可重复读

  • 定义:一个事务中,同一个查询语句执行多次,结果各不相同。

举个例子,

image.png

事务B第一次查询结果a1为1。

然后事务A修改变量a值为2。这时候事务B查询结果a2的值可能为2。

在事务B中同一个查询语句,查询结果不同,就是不可重复读。

幻读

  • 定义:在一个事务中,出现本应该被处理的数据。

举个例子,

image.png

事务A把名字为a的列所有值修改为2。

但是在提交之前,事务B突然又给列a插入一个新值。

导致最终事务A执行完后,列a所有值本应该都为2,但是却突然出现一行为1。

这种异常情况,就称为幻读。

以上就是并发事务中可能出现的情况,这是后续讲解隔离四个级别的一些需要了解的基础。

参考大佬的文章:

https://baike.baidu.com/item/%E4%B8%8D%E5%8F%AF%E9%87%8D%E5%A4%8D%E8%AF%BB/129509?fr=aladdin

https://blog.csdn.net/qq_34569497/article/details/79064208

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

lin438 发表于 2021-7-20 12:12
我看不懂你在说什么。呵呵
vvvwxf 发表于 2021-7-20 12:35
vethenc 发表于 2021-7-20 13:01
ysdy 发表于 2021-7-20 14:58
表达的好复杂
 楼主| 阿里灵灵 发表于 2021-7-20 15:18

好的,晚上我再修改一下
 楼主| 阿里灵灵 发表于 2021-7-20 15:19
lin438 发表于 2021-7-20 12:12
我看不懂你在说什么。呵呵

谢谢建议,之后我会再修改
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-25 15:25

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表