美文网首页
2020-07-16

2020-07-16

作者: 赵药 | 来源:发表于2020-07-16 17:38 被阅读0次

三个情况造成死锁:

1.脏读:事务A读取了事务B更新的数据,事务B回滚,事务A之前读到的数据就是脏数据

2.不可重复读:事务A多次读取同一个数据,在这期间,事务B修改了该数据,导致事务A多次读取的数据不一致。

3.幻读:事务A将某张表中的某个字段的所有数据设为空,在这时,事务B新增了一条数据,事务A操作结束后,发现有一条数据的该字段没有被设置为空,好像产生幻觉一样。

总结:不可重复读侧重于修改,幻读侧重于新增和删除。解决不可重复读需要锁住满足条件的行,解决幻读需要锁住整张表。

read uncommitted (读未提交)   --> 导致脏读,读取到其他事务没有提交的数据,如果其他万一回滚,这是数据无效。

REPEATABLE-READ(默认的隔离级别,读已提交) ->

解决脏读,导致不可重复读取,在同一事务中前后两次查询的数量可能不一致。

repeatable-read (可重复读) ->

解决不可重复读,导致幻读

1. 在A中开启事务     2. 在B中开启事务

3. 查询一下叫'李四'学生  4. 插入‘李四’的学生

5. 提交事务

6. 查询‘李四’,李四不存在

7 插入一下李四,有插入不成功(name要唯一)

serializable(串行化)

解决幻读

1. 一个事务一个的执行,事务都不并发,没有任何问题,但是会到性能下降

# 隔离界别越高,性能越下降(采用默认的隔离级别就可以了)

# 修改隔离级别

相关文章

网友评论

      本文标题:2020-07-16

      本文链接:https://www.haomeiwen.com/subject/txkmhktx.html