MySQL并发机制(二)——表锁

本文深入探讨了MySQL中的表锁机制,包括共享锁和独占锁的概念,以及在InnoDB存储引擎中如何实现表级别的锁操作。还介绍了意向锁及其在解决并发问题中的作用,以及元数据锁在数据库事务管理中的关键角色。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

表的共享、独占锁:

共享锁:

类似于 JUC 下的 ReentrantReadWriteLock 下的 读锁。多个事务可以同时为数据加锁,同时访问到数据。

独占锁:

类似于 JUC 下的 ReentrantReadWriteLock 下的 写锁。同一时间,只能有一个事务获取为数据加锁。
只能有一个事务访问到数据
 

不同存储引擎的锁:

默认情况下:在对某个表执行SELECT、INSERT、DELETE、UPDATE语句时
(1): InnoDB 是不会为这个表添加表级别的 S锁 或者 X锁 的, Innodb 添加的锁一般都是行级别的锁
(2):MyISAM 添加的锁一定是表级别的锁,MyISAM 不支持行级别的锁
 

注:我们可以通过使用以下命令为 Innodb  加上表级别的锁

LOCK  TABLES  t  READ :对表  t  加表级别的 共享锁 
LOCK  TABLES  t  WRITE :对表 t  加表级别的 独占锁 
MyISAM 引擎也要通过 以上命令手动加锁,在访问数据时,MyISAM默认不加锁
 

意向锁:

问题:

当我们想对 Innodb 存储引擎添加表级别的独占锁时,我们需要判断,该表中不能存在任何锁。
我们如何判断在表中是否存在行级别的锁呢?
方案一:遍历表中的数据,一个个记录的判断是否有行级锁(该方案效率太低)
方案二:使用意向锁

产生场景:

出现当我们添加行级锁时,Innodb 存储引擎会自动的给这个表添加一个表级别的意向锁
表示该表中存在行级锁。
如果行级锁是共享锁,意向锁也是共享的。行级锁是独占的,意向锁也是独占的

兼容特性:

 
 
意向共享锁
意向独占锁
普通表级共享锁
普通表级独占锁
意向共享锁
兼容
兼容
兼容
不兼容
意向独占锁
兼容
兼容
不兼容
不兼容

解释:

当我们对表中的 行记录 A 添加独占锁 A时,Innodb 会自动给该表添加一个意向独占锁 A
当我们对表中的 行记录 B 添加独占锁  B时,Innodb 会自动给该表添加一个意向独占锁 B
因为是对不同的行记录添加独占锁,所以可以两个行记录锁都会添加成功,
也就说明同时会给表添加两个意向独占锁,所以,意向独占锁可共存

元数据锁:

Innodb 默认是锁是行级锁,但那是对表中数据进行 Insert  Delete  Update  Select  操作时
如果我们要是对整个表的表结构进行变化时,那么我们会为该表添加一个表级锁,就是元数据锁

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值