锁--03---锁的分类2----表级锁

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


锁的分类2:表级锁,行锁,页锁

在这里插入图片描述

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

在这里插入图片描述

①表级别----S锁、X锁

1. 表级别 S锁、X锁

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

LOCK TABLES t READ :InnoDB存储引擎会对表t 加表级别的S锁。

LOCK TABLES t WRITE :InnoDB存储引擎会对表t 加表级别的X锁。

2. 语法

MySQL锁–01—读锁、写锁、表锁及案例

在这里插入图片描述

加读锁 : lock table table_name read;
加写锁 : lock table table_name write;
释放表锁
unlock tables;
手动增加表锁
lock table 表名字1 read(write),表名字2 read(write),其它;
查看表上加过的锁
show open tables;

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

show status like 1 ‘Table_locks%’;

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

3. 小结

在这里插入图片描述

在这里插入图片描述

MALSAM引擎

MALSAM引擎在执行查询语句前(select),-----会自动给涉及的所有表加读锁
在执行增删改操作之前,-------会自动给涉及的表加写锁
  • 对MyISAM表的读操作(加读锁),不会阻塞其他进程对同一表的读请求,但会阻塞对同一表的写请求。只有当读锁释放后,才会执行其它进程的写操作。
  • 对MyISAM表的写操作(加写锁),会阻塞其他进程对同一表的读和写操作,只有当写锁释放后,才会执行其它进程的读写操作。

读锁会阻塞写,但是不会堵塞读。而写锁则会把读和写都堵塞

②表级别----意向锁 (intention lock)

在这里插入图片描述

1.意向锁要解决的问题

在这里插入图片描述

在这里插入图片描述

2.意向锁分为两种:

在这里插入图片描述
– 事务要获取某些行的 S 锁,必须先获得表的 IS 锁。

-- 事务要获取某些行的 S 锁,必须先获得表的 IS 锁。
SELECT column FROM table ... LOCK IN SHARE MODE;

– 事务要获取某些行的 X 锁,必须先获得表的 IX 锁。

-- 事务要获取某些行的 X 锁,必须先获得表的 IX 锁。
SELECT column FROM table ... FOR UPDATE;

意向锁是有数据引擎自己维护的,用户无法手动操作意向锁,在为数据行加共享 / 排他锁之前,InooDB 会先获取该数据行所在在数据表的对应意向锁。

3.意向锁的兼容互斥性

1. 意向锁之间是互相兼容的

在这里插入图片描述

2. 意向锁不会与行级的共享 / 排他锁互斥!!!
3. 意向锁与普通的表级排他 / 共享锁互斥:

在这里插入图片描述

③表级别----自增锁(AUTO-INC锁)

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

插入数据的三类模式

在这里插入图片描述

自增锁(AUTO—INC)

在这里插入图片描述

innodb_autoinc_lock_mode

  • innodb_autoinc_lock_mode有三种取值,分别对应与不同锁定模式

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

④ 表级别----元数据锁(MDL锁)

在这里插入图片描述

当对一个表做增删改查操作的时候,加 MDL读锁;

当要对表做结构变更操作的时候,加 MDL 写锁。

在这里插入图片描述

页锁

在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值