Skip to main content

并发问题

David LiuAbout 2 min

并发问题

脏读

一个事务读到另一个事务还没有提交的数据。

截屏2023-01-03 12.19.43

不可重复读

定义:一个事务先后读取同一条记录,但两次读取的数据不同。

截屏2023-01-03 12.20.50

幻读

The so-called phantom problem occurs within a transaction when the same query produces different sets of rows at different times. For example, if a SELECT is executed twice, but returns a row the second time that was not returned the first time, the row is a “phantom” row.

定义:一个事务,当同一个查询在不同的时间产生不同的结果集时,事务中就会出现所谓的幻象问题。

其他定义解释:

同一个事务里面连续执行两次同样的 sql 语句,可能导致不同结果的问题,如第二次 sql 语句可能会返回之前不存在的行。

一个事务按照条件查询数据时,没有对应的数据行,但是在插入数据时,又发现这行数据已经存在,好像出现了“幻影”

事务 B 前后两次读取同一个范围的数据,在事务 B 读取的过程中 A 增加了数据,导致 B 后一次读取查询中之前没有的行;

和不可重复读有些类似,幻读强调的是事务 A 增加的记录,不可重复读强调的是修改的数据。

例如,如果 SELECT 执行了两次,但第二次返回了第一次没有返回的行,则该行是“幻像”行。

截屏2023-01-03 12.21.57

如上三种问题,从上到下依次危害减弱。

4.第一类更新丢失

事务 A 和事务 B 都对数据进行更新,A 发生异常,进行回滚,把 B 提交的事务覆盖了。

5.第二类更新丢失(一般说的丢失更新)

事务 A 和事务 B 都对数据进行更新,事务 A 把事务 B 的更新数据的给覆盖了

在这里插入图片描述