MySQL锁的详细讲解(全局锁、表级锁、行级锁)

# 概述

MySQL锁的详细讲解(全局锁、表级锁、行级锁)_第1张图片

MySQL锁的详细讲解(全局锁、表级锁、行级锁)_第2张图片

# 全局锁

MySQL锁的详细讲解(全局锁、表级锁、行级锁)_第3张图片

MySQL锁的详细讲解(全局锁、表级锁、行级锁)_第4张图片

MySQL锁的详细讲解(全局锁、表级锁、行级锁)_第5张图片

# 表级锁

MySQL锁的详细讲解(全局锁、表级锁、行级锁)_第6张图片

表锁

MySQL锁的详细讲解(全局锁、表级锁、行级锁)_第7张图片

元数据锁

MySQL锁的详细讲解(全局锁、表级锁、行级锁)_第8张图片

假如有客户端1、客户端2,

  1. 客户端1,执行begin命令开启了事务
    1. 客户端1没有执行读写语句,这时,客户端执行查看元数据锁的命令,查看到没有加到元数据锁
    2. 当客户端1执行select读操作时,
      1. 这时,客户端2,执行查看元数据锁的命令,查看到有一个元数据锁(锁类型:SHARED_READ)
      2. 这时,客户端2,执行alter table对表进行变更操作,会被阻塞住(因为执行alter table所对应的EXCLUSIVE锁类型会与其它的MDL(SHARED_READ、SHARED_WRITE)都互斥)
      3. 客户端2,执行读、写操作时,都可以成功,因为SHARED_READ、SHARED_WRITE之间是兼容的
    1. 客户端1,执行 commit 提交事务时
      1. 这时,客户端2执行的alter就不会被阻塞住了

意向锁

MySQL锁的详细讲解(全局锁、表级锁、行级锁)_第9张图片

MySQL锁的详细讲解(全局锁、表级锁、行级锁)_第10张图片

MySQL锁的详细讲解(全局锁、表级锁、行级锁)_第11张图片

MySQL锁的详细讲解(全局锁、表级锁、行级锁)_第12张图片

# 行级锁

MySQL锁的详细讲解(全局锁、表级锁、行级锁)_第13张图片

MySQL锁的详细讲解(全局锁、表级锁、行级锁)_第14张图片

MySQL锁的详细讲解(全局锁、表级锁、行级锁)_第15张图片

MySQL锁的详细讲解(全局锁、表级锁、行级锁)_第16张图片

MySQL锁的详细讲解(全局锁、表级锁、行级锁)_第17张图片

演示第一种情况

# 总结

MySQL锁的详细讲解(全局锁、表级锁、行级锁)_第18张图片

# 面试题

# MySQL Update是行锁还是表锁?

MySQL锁的详细讲解(全局锁、表级锁、行级锁)_第19张图片

你可能感兴趣的:(数据库,interview,MySQL锁)