MySQL-表级锁(表锁、元数据锁、意向锁)

1、表级锁介绍

表级锁,每次操作锁住整张表。锁定粒度大,发生锁冲突的概率最高,并发度最低。应用在MyISAM、InnoDB、BDB等存储引擎中

1.1、对于表级锁,主要分为以下三类:

  • 表锁(共享读锁、独占写锁)
  • 元数据锁(meta data lock,MDL)
  • 意向锁

2、表锁

2.1、对于表锁,分为两类:

  • 共享读锁(read lock)
  • 独占写锁(write lock)

2.2、共享读锁

在这里插入图片描述
左侧为客户端一,对指定表加了读锁,不会影响右侧客户端二的读,但是会阻塞右侧客户端的

2.2.1、创建表 score

create table score(
id int comment 'ID',
name varchar(20) comment '姓名',
math int comment '数学',
english int comment '英语',
chinese int comment '语文'
) comment '学员成绩表';
insert into score(id, name, math, english, chinese) VALUES (1, 'Tom', 67, 88, 95), (2, 'Rose' , 23, 66, 90),(3, 'Jack', 56, 98, 76);

在这里插入图片描述
在这里插入图片描述

2.3、独占写锁

在这里插入图片描述
左侧为客户端一,对指定表加了写锁,会阻塞右侧客户端的

在这里插入图片描述
在这里插入图片描述

3、元数据锁

在这里插入图片描述

MDL加锁过程是系统自动控制,无需显式使用,在访问一张表的时候会自动加上。MDL锁主要作用是维护表元数据的数据一致性,在表上有活动事务的时候,不可以对元数据进行写入操作。为了避免DML与DDL冲突,保证读写的正确性

这里的元数据,大家可以简单理解为就是一张表的表结构。 也就是说,某一张表涉及到未提交的事务时,是不能够修改这张表的表结构的。

MySQL5.5中引入了MDL,当对一张表进行增删改查的时候,加MDL读锁(共享);当对表结构进行变更操作的时候,加MDL写锁(排他)

在这里插入图片描述当执行SELECT语句时,添加的是元数据共享锁(SHARED_READ),会阻塞元数据排他锁(EXCLUSIVE),之间是互斥的。

在这里插入图片描述
在这里插入图片描述

3.1、查看数据库中的元数据锁的情况

select object_type,object_schema,object_name,lock_type,lock_duration from performance_schema.metadata_locks ;

在这里插入图片描述
在这里插入图片描述
当执行SELECT、INSERT、UPDATE、DELETE等语句时,添加的是元数据共享锁(SHARED_READ /
SHARED_WRITE),之间是兼容的。

4、意向锁

为了避免DML在执行时,加的行锁表锁冲突,在InnoDB中引入了意向锁,使得表锁不用检查每行数据是否加锁,使用意向锁来减少表锁的检查。

4.1、假如没有意向锁

假如没有意向锁,客户端一对表加了行锁后,客户端二如何给表加表锁呢,来通过示意图简单分析一下:

首先客户端一,开启一个事务,然后执行DML操作,在执行DML语句时,会对涉及到的行加行锁。
在这里插入图片描述
客户端二,想对这张表加表锁时,会检查当前表是否有对应的行锁,如果没有,则添加表锁,此时就会从第一行数据,检查到最后一行数据,效率较低。
在这里插入图片描述

4.2、有了意向锁之后

客户端一,在执行DML操作时,会对涉及的行加行锁,同时也会对该表加上意向锁。
在这里插入图片描述
而其他客户端,在对这张表加表锁的时候,会根据该表上所加的意向锁来判定是否可以成功加表锁,而不用逐行判断行锁情况了。
在这里插入图片描述

4.3、查看意向锁及行锁的加锁情况

select object_schema,object_name,index_name,lock_type,lock_mode,lock_data from performance_schema.data_locks;

4.3.1、意向共享锁与表读锁是兼容的

在这里插入图片描述
在这里插入图片描述

4.3.2、意向排他锁与表读锁、写锁都是互斥的

在这里插入图片描述
在这里插入图片描述

  • 19
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值