脏读,幻读,不可重复读

事务的4大特性:

原子性(Atomicity):事务是数据库的逻辑工作单位,它对数据库的修改要么全部执行,要么全部不执行。 
一致性(Consistemcy):事务前后,数据库的状态都满足所有的完整性约束。 
隔离性(Isolation):并发执行的N个事务是隔离的,一个不影响一个,一个事务在没有commit之前,被修改的数据不可能被其他事务看到(通过设置数据库的隔离级别)。 
持久性(Durability):持久性意味着当系统或介质发生故障时,确保已提交事务的更新不能丢失。持久性主要在于DBMS的恢复性能。

脏读

是指当一个事务正在访问数据,并且对数据进行了修改,而这个修改还没提交到数据库中,这是,另外一个事务也访问了这个数据,然后还使用了这个数据。

举例:1. ABC的原始工资为2000,财务人员将ABC的工资改到了3000(并没有提交),

  2. ABC读取自己的工资,发现自己的工资变成了3000,

3. 但是,财务发现了操作有失误,便将事务回滚,即把工资又改回了2000。

这样的话,ABC看到自己的工资为3000,就是脏读。


幻读

是指当事务不是独立执行时发生的一种现象,例如第一个事务对一个表中的数据进行了修改,假如这种修改涉及到表中的

全部数据行。与此同时,第二个事务也修改了表中的数据,是向表中插入一条新的数据行。那么,当地一个事务在操作的

时候就会读取到最新的数据表而不是最原始的数据表。

举例:1. 数据表中工资为2000的人有10个,

  2. ABC想读取这张数据表,读取的同时,XYZ向这张表中插入了工资为2000的一条新数据,

3. ABC最终读取的结果并不是10个工资为2000的员工,而变成了11个。

发生了幻读。


不可重复度

是指在同一个事务中,多次读取同一条数据。在这个事务还没有结束时,另外一个事务也访问了该数据。那么,在第一个事

务中的读取之间,由于第二个事务的修改,那么第一个事务两次读取到的数据可能是不一样的。这样在一个事务内两次读取

到的数据是不一样的,因此称为不可重复读。

举例:1. 在事务A中,ABC读取了一位员工工资为2000,此时操作并没有完成,

  2. 在事务B中,财务人员修改了这位员工的工资为3000,并提交了事务,

3. 在事务A中,ABC再次读取这位员工工资的时候,工资变为了3000。


不可重复读的重点为修改同样的条件下,你读取过的数据,再次读出来的时候发现数据变了。

幻读的中点为增加或删除同样的条件下,你读取出来的数据的记录数不一样了。


你可能感兴趣的:(脏读,幻读,不可重复读)