mysql表级锁(表锁/元数据锁/意向锁)


表级锁的分类

1、表锁(分类)

表锁是锁住整张表,通过不同的表锁设置,控制并发访问。某些引擎不支持行锁,需要通过表锁来控制并发。支持行锁的引擎,就不建议使用表锁了。

1.表共享读锁(read lock)

只能进行读操作,不能进行写操作

第一个session窗口,对表进行读锁的情况下,会有错误的提示

在这里插入图片描述

其他session窗口中进行更新操作的时候会被阻塞:
在这里插入图片描述

当unlock tables时,读锁被释放,阻塞被释放,


2.表独占写锁(write lock)

在这里插入图片描述
当进行写锁的情况下:
当前会话session可以正常进行写入,读取等操作
但是其他会话session将无法进行读取和写入操作等写锁unlock tables被释放的情况下,将恢复正常的读写操作;

3.语法:

1.加锁:lock tables 表名....read/write

2解锁:unlock tables /客户端断开

2、元数据锁(meta data lock )

元数据锁主要是面向DML和DDL之间的并发控制,如果对一张表做DML增删改查操作的同时,有一个线程在做DDL操作,不加控制的话,就会出现错误和异常。元数据锁不需要我们显式的加,系统默认会加。

元数据锁的原理:

1.当做DML操作时,会申请一个MDL读锁

2.当做DDL操作时,会申请一个MDL写锁

3.读锁之间不互斥,读写和写写之间都互斥

3、意向锁

nnoDB支持多种粒度锁定,允许行锁和表锁并存。为了使在多个粒度级别上的锁定变得切实可行,InnoDB实现了意图锁。
意向锁是表级锁,表示事务稍后对表中的行需要上哪种类型的锁(共享锁或排他锁)。有两种类型的意图锁

1.意向共享锁(IS):由语句 select … lock in share mode添加

与表锁共享锁兼容,与表锁写入互斥

2.意向排他锁(IX):由 inser、update、delete、select…for update添加

与表锁共享锁及排它锁互斥,意向锁之间不会排斥

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值