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
我看不懂你在说什么。呵呵
mysql事务,唯一性, MYSQL基本操作 表达的好复杂:lol ysdy 发表于 2021-7-20 14:58
表达的好复杂
好的,晚上我再修改一下 lin438 发表于 2021-7-20 12:12
我看不懂你在说什么。呵呵
谢谢建议,之后我会再修改
页:
[1]