mysql的四种隔离级别和七中传播行为

https://blog.csdn.net/qq_34375473/article/details/121071860

  • spring框架中数据库的默认隔离级别和传播行为

  参照Transactional注解:

  

  • Innodb 引擎在repeatable read隔离级别下,如何解决部分幻读的问题
    • 快照读通过 MVCC 方式解决了幻读。
    • 当前读通过 next-key lock解决了幻读(事务一开始就加锁,例如select * from xxx for update、update、delete等)。
    • 解决不了的case(如果在一个事务中发生了当前读,并且在另一个事务插入数据前没来得及加间隙锁的话):https://blog.csdn.net/BASK2311/article/details/128453901

  

  • mysql各种锁以及加锁时机
类型 说明 加锁时机
行锁/记录锁 锁一条记录 select或update语句中,通过主键或唯一索引,等值匹配(=),命中的数据;
间隙锁(gap) 锁记录间隙,左开右开,例如:(5,9)
  • 情形一:范围查询,匹配字段是索引项,且没有数据返回
  • 情形二:等值查询,匹配字段是唯一索引,且没有数据返回

  例如表中存在id为 9, 11的数据:

select * from user where id > 15 for update;  加(11, +∞)的gap锁,注意不是(15,+∞)
临界锁(next-key) 间隙锁+记录锁,左开右闭,例如:(5,9]
  • 情形一:范围查询,匹配字段是索引项,且有数据返回
  • 情形二:等值查询,匹配字段是索引项,不论是否有值返回

   注意:Next-Key Lock和Gap Lock一样,只有在InnoDB的RR隔离级别中才会生效。

附录:
mvcc:https://mp.weixin.qq.com/s?__biz=MzI3NzE0NjcwMg==&mid=2650189992&idx=1&sn=e6c251930f8650dabd3b39f5f692b951&chksm=f368ad89c41f249f1a52aafc78df84167f322114ce5bd2ca13560198d7fe2c94e3ccecf5ed96&scene=21#wechat_redirect

当前读和快照读:https://blog.csdn.net/QuietThinking/article/details/117046744

    

posted @ 2023-03-20 22:39  Katsu  阅读(6)  评论(0编辑  收藏  举报