MySQL 的事务隔离级别(Isolation Level)
数据库锁,分为悲观锁和乐观锁,“悲观锁”
- 悲观锁一般利用 SELECT … FOR UPDATE 类似的语句
-
乐观锁利用 CAS 机制,并不会对数据加锁,而是通过对比数据的时间戳或者版本号,实现版本判断。
脏读: 读到了未提交事务的数据。
不可重复读: 事务 A 先读取一条数据,然后执行逻辑的过程中,事务 B 更新了这条数据,事务 A 再读取时,发现数据不匹配,这个现象就是“不可重复读”。
幻读: 在一个事务内,同一条查询语句在不同时间段执行,得到不同的结果集。
-
解决幻读的办法是锁住记录之间的“间隙”,为此 MySQL InnoDB 引入了新的锁,叫间隙锁(Gap Lock),所以在面试中,你也要掌握间隙锁,以及间隙锁与行锁结合的 next-key lock 锁。
一般都用设置RC ,不用RR,间隙锁性能低,可能锁表
死锁只有同时满足互斥、持有并等待、不可剥夺、循环等待时才会发生
-
持有并等待:我们可以一次性申请所有的资源,这样就不存在等待了。
-
不可剥夺:占用部分资源的线程进一步申请其他资源时,如果申请不到,可以主动释放它占有的资源,这样不可剥夺这个条件就破坏掉了。
-
循环等待:可以靠按序申请资源来预防,也就是所谓的资源有序分配原则,让资源的申请和使用有线性顺序,申请的时候可以先申请资源序号小的,再申请资源序号大的,这样的线性化操作就自然就不存在循环了。
标签:事务,隔离,间隙,等待,申请,MySQL,级别,资源 From: https://www.cnblogs.com/jiaozg/p/17214891.html