视频合集

    最全MySQL锁详解:表/行/页锁、共享/排它锁、悲观/乐观锁等

    • 课程笔记
    • 问答交流

    众所周知,MySQL索引MySQL事务和锁是mysql中非常重要功能,同时也是面试的重点和难点。

    为了助大家掌握好MySQL的各种锁,这节课我会重点来讲解以下5点:

    1.MySQL锁包含哪些类型?

    2.不同的存储引擎采用什么锁?

    3.数据库的读写锁是哪个?

    4.行锁的底层实现?

    5.乐观锁和悲观锁的实现?

    MySQL锁的类型

    最全MySQL锁详解:表/行/页锁、共享/排它锁、悲观/乐观锁等-mikechen

    1.表级锁

     

     

    评论交流
    1. 会会

      老师看下我的截图,事务1 对 number=13 for update, 会触发next key锁吗??

      • mikechen

    2. 路正银

      1.谈谈你对事务与锁的理解?
      事务是指作为单个逻辑工作单元执行的一系列操作,要么完全的执行,要么完全地不执行。必须满足ACID属性
      事务会有并发控制的问题,会出现脏读、可不重复读、幻读的问题
      数据库事务隔离级别是为了解决事务并发可能出现的问题
      数据库的隔离级别是通过数据库锁实现的

      2.常见的mysql数据库锁有哪些?
      3.各自的优劣势与应用场景?
      表级锁:开销小,加锁快,不会出现死锁,锁定粒度大,发生锁冲突的概率最高,并发度最低。试用于查询为主,更新少的情况。
      行级锁:开销大,加锁慢;会出现死锁;锁定粒度最小,发生冲突的概率最低,并发度也最高。
      页面锁:开销和加锁时间介于表锁和行锁之间;会出现死锁;锁定粒度介于表锁和行锁之间,并发度一般。
      InnoDB行锁的类型
      共享锁(读锁):多个事务对于同一数据可以共享一把锁,都能访问到数据
      排它锁(写锁):对某一资源加排它锁,自身可以进行增删改查,其他人无法进行任何操作
      InnoDB表锁的类型
      意向锁
      意向共享锁:事务想对表中的某些记录加上共享锁
      意向排它锁:事务想对表中的某些记录加上排它锁
      InnoDB行锁实现方式(锁的是索引)
      记录锁:单个记录上的锁
      间隙锁:锁定一个范围,但不包括记录本身
      Next-Key Lock:间隙锁+记录锁,锁定一个范围,并且锁定记录本身

      4.MySQL如何解决死锁?
      等待,直到超时
      发起死锁检测,主动回滚一条事务,让其他事务继续执行

      • mikechen

        事务、锁、索引,这是3大必考点,再加上我下周要讲的性能优化,如果说这几点都掌握了,基本就没有问题了,加油 ✗拳头✗ 。

        备注:其实死锁的关键在于,两个(或以上)的Session加锁的顺序不一致,这里还可以参考我之前在Java多线程与并发编程里面讲到的死锁,其实道理都是一致的,防止死锁是核心关键点。

    欢迎您,新朋友,感谢参与互动!