阿里灵灵 发表于 2021-7-20 11:44

MYSQL事务·并发事务的三大问题

本帖最后由 阿里灵灵 于 2021-7-22 11:23 编辑

## 脏读

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

举个例子,



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

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

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

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

## 不可重复读

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

举个例子,



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



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



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



## 幻读

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

举个例子,



事务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

lin438 发表于 2021-7-20 12:12
我看不懂你在说什么。呵呵

mysql事务,唯一性,

vethenc 发表于 2021-7-20 13:01

MYSQL基本操作

ysdy 发表于 2021-7-20 14:58

表达的好复杂:lol

阿里灵灵 发表于 2021-7-20 15:18

ysdy 发表于 2021-7-20 14:58
表达的好复杂

好的,晚上我再修改一下

阿里灵灵 发表于 2021-7-20 15:19

lin438 发表于 2021-7-20 12:12
我看不懂你在说什么。呵呵

谢谢建议,之后我会再修改
页: [1]
查看完整版本: MYSQL事务·并发事务的三大问题