首先来了解三个概念:
**
1、脏读:
**
无效数据读取,事务1修改但未提交,此后事务2读取该值,但后面事务1因为某些原因撤销对该值的修改,这就导致事务2读取的数据是无效的,值得注意:脏读一般是针对update操作的。
**
2、不可重复读:
**
是指在数据库访问中,一个事务范围内两个相同的查询却返回了不同数据。在一个事务内,多次读同一个数据。在这个事务还没有结束时,另一个事务也访问该同一数据并修改数据。那么,在第一个事务的两次读数据之间。由于另一个事务的修改,那么第一个事务两次读到的数据可能不一样,这样就发生了在一个事务内两次读到的数据是不一样的,因此称为不可重复读,即原始读取不可重复。
**
3、幻读:
**
事务1按照一定条件进行数据读取, 期间事务2 插入了相同搜索条件的新数据,事务1再次按照原先条件进行读取时,发现了事务2 新插入的数据称为幻读。
Oracle默认事务隔离级别是读已提交
MySQL默认隔离级别是可重复读
**
四种隔离级别:
**
读未提交:脏读、不可重复读、幻读都会存在
读已提交:避免脏读,但不可重复读及幻读会存在
可重复读:避免脏读及不可重复读,幻读存在
可串行化:避免脏读、不可重复读、幻读