并发问题
并发问题
脏读
定义:一个事务读到另一个事务还没有提交的数据。
不可重复读
定义:一个事务先后读取同一条记录,但两次读取的数据不同。
幻读
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 执行了两次,但第二次返回了第一次没有返回的行,则该行是“幻像”行。
如上三种问题,从上到下依次危害减弱。
更新丢失
第一类更新丢失
事务 A 和事务 B 都对数据进行更新,A 发生异常,进行回滚,把 B 提交的事务覆盖了。
第二类更新丢失
一般说的丢失更新,事务 A 和事务 B 都对数据进行更新,事务 A 把事务 B 的更新数据的给覆盖了