事务隔离级别
读取未提交
即在A事务执行过程中可以读取到B事务已修改但是还未提交的数据。
缺点:脏读。由于此级别并不会给数据库带来很大的性能提升,而且还有比较严重的缺陷,所以不推荐使用。
场景理解:如果A将从B事务修改的数据返回给前端,B事务又进行了回滚,此时A返回的数据为脏数据。
读取已提交(多数数据库默认的事务隔离级别)
A事务在执行过程中只能读取到其它事务已经提交了的数据。
缺点:不可重复读
场景理解:A事务包含多条查询语句
1.A事务读取F1字段
2.B事务修改了F1字段并提交
3.A事务再次读取F1字段,发现和第一次读取时的值不一样了
可重复读(mysql默认隔离级别)
该级别保证了在同一个事务中多次读取同样记录的结果是一致的(不太明白怎么保证的,不明白不可重复读和幻读有什么区别),但是存在幻读的问题,在innoDB存储引擎中解决了该问题。
串行化
对每个事务进行强制性排队串行执行,读取到的每一行数据加锁,不存在前面说的各种缺点。
缺点:性能低,不推荐使用
innoDB
- 处理死锁的解决方式-将持有最少行级排它锁的事务进行回滚