什么是第一类丢失更新、脏读、不可重复读、第二类丢失更新、幻读 ?
- 第一类丢失更新
撤销一个事务的时候,把其它事务已提交的更新数据覆盖了。这是完全没有事务隔离级别造成的。如果事务1被提交,另一个事务被撤销,那么会连同事务1所做的更新也被撤销。
- 脏读(Dirty Read)
如果一个事务对数据进行了更新,但事务还没有提交,另一个事务就可以“看到”该事务没有提交的更新结果。这样就造成的问题就是,如果第一个事务回滚,那么第二个事务在此之前所“看到”的数据就是一笔脏数据。
- 不可重复读取(Non-Repeatable Read)
不可重复读取是指同一个事务在整个事务过程中对同一笔数据进行读取,每次读取结果都不同。如果事务1在事务2的更新操作之前读取一次数据,在事务2的更新操作之后再读取同一笔数据一次,两次结果是不同的。所以Read Uncommitted也无法避免不可重复读取的问题。
- 第二类丢失更新
它和不可重复读本质上是同一类并发问题,通常将它看成不可重复读的特例。当两个或多个事务查询相同的记录,然后各自基于查询的结果更新记录时会造成第二类丢失更新问题。每个事务不知道其它事务的存在,最后一个事务对记录所做的更改将覆盖其它事务之前对该记录所做的更改。
- 幻读(Phanton Read)
幻读是指同样一个查询在整个事务过程中多次执行后,查询所得的结果集是不一样的。幻读针对的是多笔记录。在Read Uncommitted隔离级别下,不管事务2的插入操作是否提交,事务1在插入操作执行之前和之后执行相同的查询,取得的结果集是不同的,所以Read Uncommitted同样无法避免幻读。
无事务隔离级别,则存在:第一类丢失更新、脏读、不可重复读、第二类丢失更新和幻读问题。
Read Uncommitted存在:脏读、不可重复读、第二类丢失更新和幻读问题。
Read committed存在:不可重复读、第二类丢失更新和幻读问题。
Repeatable Read存在:幻读问题。
Serializable 不存在问题。
本文标题:什么是第一类丢失更新、脏读、不可重复读、第二类丢失更新、幻读 ?
本文链接:https://www.haomeiwen.com/subject/wvcdaqtx.html
网友评论