MySQL--行级锁与表级锁

本文详细介绍了MySQL的行级锁和表级锁,包括锁的类型、死锁、锁定粒度以及不同存储引擎的锁机制。InnoDB存储引擎支持行级锁和表级锁,行级锁分为共享锁和独占锁,而表级锁则用于读多写少或写操作频繁的场景。InnoDB的意向锁用于多粒度锁机制,确保行锁与表锁的兼容性。

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

原文网址:MySQL--行级锁与表级锁_IT利刃出鞘的博客-CSDN博客

简介

说明

本文介绍MySQL的行级锁与表级锁。

锁的类型

锁类型

死锁

锁定粒度(并发性)

适用场景

表级锁

不会死锁

最大,发生锁冲突的概率最大(并发性低)

场景1:读多写少;

场景2:写特别多。若用行锁,会导致事务执行效率低,可能造成其他事务长时间锁等待和锁冲突。

行级锁

会死锁

最小,发生锁冲突的概率最低(并发性最高)

并发量大。

页面锁

会死锁

居中,并发一般

不同的存储引擎的锁机制

存储引擎支持的锁说明
InnoDB表级锁、行级锁(默认)。InnoDB行级锁基于索引实现。若查询字段无索引或索引失效,则使用表锁。
MyISAM表级锁
MEMORY表级锁
BDB表级锁、页面锁

行锁

概述

说明

行锁只在InnoDB中。有两种锁:共享锁(Share Lock)(也称为:读锁)、独占锁(Exclusive Lock)。共享锁也称为:读锁;独占锁也称为:写锁。

InnoDB实现了以下两种类型的行锁。意向锁是InnoDB自动加的,不需用户干预。

  • 共享锁(S):允许获得共享锁的事务去读一行,阻止其他事务获得相同数据集的排他锁。
  • 排他锁(X):允许获得排他锁的事务更新数据,阻止其他事务取得相同数据集的共享锁和排他锁。另外,为了允许行锁和表锁共存,实现多粒度锁机制,InnoDB还有两种内部使用的意向锁(Intention Locks),这两种意向锁都是表锁。
  • 意向共享锁(IS):事务打算给数据行加行共享锁,事务在给一个数据行加共享锁前必须先取得该表的IS锁。(Intention Share)
  • 意向排他锁(IX):事务打算给数据行加行排他锁,事务在给一个数据行加排他锁前必须先取得该表的IX锁。(Intention Exclusive)

上述锁模式的兼容情况具体如下表所示。如果一个事务请求的锁模式与当前的锁兼容,InnoDB就将请求的锁授予该事务;反之,如果两者不兼容,该事务就要等待锁释放。

上边只是部分内容,为便于维护,本文已迁移到此地址:MySQL-行级锁与表级锁 - 自学精灵

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

IT利刃出鞘

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值