mysql锁的分类

本文详细探讨了数据库锁的两种主要类型——乐观锁和悲观锁,以及它们在读写锁、表锁和行锁中的表现,特别强调了粒度、并发度和可能出现的死锁问题,以及表锁在数据迁移场景中的应用。

锁分类

  • 从性能上分为乐观锁悲观锁
  • 从对数据操作类型分为读锁写锁(都属于悲观锁
    • 读锁(共享锁,S锁(shared)):针对同一个数据,多个操作可以同时进行而不互相影响
    • 写锁(排它锁,X锁(eXclusive)):当前写操作没有完成前,它会阻其它写锁和其它锁
  • 从对数据操作的颗粒度分类表锁、行锁

表锁

        每次操作锁定整张表。开销小,加锁快;不会出现死锁;锁定粒度大,发生锁冲突概率最高,并发度最低;一般用做数据迁移的场景

行锁

       每次操作锁定一行数据。开销大,加锁慢;会出现死锁;锁定粒小,发生锁冲突概率小,并发度高

### 三级标题:MySQL 机制及类型详解 MySQL 中的机制是数据库并发控制的重要组成部分,用于协调多个事务对共享资源的访问。根据定粒度和使用场景的不同,MySQL 支持多种类型的,主要包括表级、行级、意向、间隙(Gap Lock)和临键(Next-Key Lock)等。 #### 表级 表级是最基本的类型,其定粒度最大,适用于整张表的操作。由于定范围较大,表级在高并发环境下容易导致较高的冲突概率,因此并发性能较低。该类通常用于结构变更或全表操作场景[^3]。 ```sql -- 示例:显式加表 LOCK TABLES table_name READ; ``` #### 行级 行级定粒度最小,仅对特定的行进行定,从而显著提高并发性能。InnoDB 存储引擎支持行级,并且该机制依赖于索引实现。如果没有使用索引,则行级可能退化为表[^2]。 ```sql -- 示例:更新某一行时会自动加上行 UPDATE table_name SET column = value WHERE id = 100; ``` #### 意向 意向是一种表级别的,用来表明事务对表中某些行加的“意图”。它分为意向共享(IS)和意向排他(IX),主要用于优化表级冲突检测效率[^2]。 意向与其它之间的兼容性如下: - IS 和 IS:兼容 - IS 和 IX:兼容 - IS 和 S:兼容 - IS 和 X:不兼容 - IX 和 IX:兼容 - IX 和 S:不兼容 - IX 和 X:不兼容 - S 和 S:兼容 - S 和 X:不兼容 - X 和 X:不兼容 #### 间隙(Gap Lock) 间隙是在可重复读(RR)隔离级别下防止幻读的关键机制之一。它不仅定当前记录,还定索引记录之间的“间隙”,以阻止其他事务插入新的数据行[^4]。 #### 临键(Next-Key Lock) 临键是行的一种扩展形式,结合了记录(Record Lock)和间隙的功能。它定的是一个范围,并包括该范围内的具体记录。这种机制可以有效地避免幻读问题的发生,同时保证了事务的隔离性和一致性[^4]。 #### 总结 MySQL 提供了多种机制来适应不同的业务需求。对于需要大规模并发写入的应用,推荐使用 InnoDB 引擎并合理利用索引,以支持高效的行级;而在执行全表扫描或结构性修改时,表级可能是更合适的选择。此外,在 RR 隔离级别下,间隙和临键能够有效防止幻读现象,提升系统的数据一致性和可靠性[^4]。 为了进一步优化的使用,建议开发者在关键业务操作前进行分析,通过 `EXPLAIN` 分析执行计划,以及使用 `SHOW ENGINE INNODB STATUS` 监控状态,最终构建高性能、高并发的数据库应用[^1]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值