先解释下脏读、不可重复读、幻读
脏读:所谓脏读,就是读到了别的事物回滚前的脏数据,比如事物B执行过程中修改了数据X,在未提交前,事物A读取了
X,而事物B却回滚了,这样事物A就形成了脏读。
不可重复读:事物A首先读取了一条数据,执行逻辑的时候,事物B将这条数据改变了,事物A再次读取的时候,数据不再匹配,这叫做不可重复读
幻读:事物A首先根据条件索引得到N条数据,然后事物B改变了这N条数据之外的M条或者增添了M条复合事物A搜索条件的数据,导致事物A再次搜索发现有N+M条数据了,就产生了幻读。
不可重复读和幻读的比较:
两者有些相似,前者针对的是update,后者针对的是insert。
数据库事务隔离级别分为四种:
1.serializable (串行化):事务串行执行,性能比较低
2.REPEATABLE READ(重复读):保证了一个事物不会修改已经由另一个事物读取但未提交的数据,避免了“脏读取”和“不可重复读取",但是不能避免幻读,缺点是带来一定的性能损失。
3.READ COMMITTED(提交读):大部分主流数据库默认的事务等级是提交读,保证一个事务不会读到另一个并行事务已修改但未提交的数据,避免了”脏读取“,但是无法避免 可重复读取和幻读
4.READ UNCOMMITTED:事务A可以读到事务B尚未提交的改动,有可能会造成脏读,不可重复读和幻读。