MySQL--行级锁与表级锁

朴灿烈づ我的快乐病毒、 2023-09-29 17:18 193阅读 0赞

原文网址: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-行级锁与表级锁 - 自学精灵

发表评论

表情:
评论列表 (有 0 条评论,193人围观)

还没有评论,来说两句吧...

相关阅读