MySQL 中有哪几种锁?

在 MySQL 中,锁机制用于控制并发访问,以保证数据的一致性和完整性。主要有以下几种锁类型:

1. 表级锁(Table Lock)

  • 读锁(共享锁):允许多个会话并发读取表的数据,但不允许写操作。读锁之间不会互相阻塞。
  • 写锁(排他锁):获得写锁的会话独占该表,阻止其他会话的读和写操作。只有当前会话释放锁后,其他会话才能访问该表。

表级锁简单易用,锁开销小,但并发性较低,适用于读多写少的应用。

2. 行级锁(Row Lock)

  • 只锁定访问的行,而不影响同一表中的其他行。
  • 共享锁(S 锁):允许多个事务并发读取同一行数据,但不能对其进行修改。
  • 排他锁(X 锁):禁止其他事务读取或修改同一行数据。

行级锁的并发性更高,但开销和管理复杂度较大,适用于高并发的写操作环境。InnoDB 引擎默认使用行级锁。

3. 页级锁(Page Lock)

  • 锁定数据所在的数据页,每页包含多个行。
  • 页级锁的开销介于表级锁和行级锁之间,适用于并发度适中且数据量较大的场景。

页级锁主要用于BDB存储引擎,InnoDB 不使用这种锁。

4. 意向锁(Intention Lock)

  • 是 InnoDB 中的一种内部锁,意在表级锁和行级锁之间增加协调层次。
  • 意向共享锁(IS):事务打算在表的某几行上加共享锁时,先申请 IS 锁。
  • 意向排他锁(IX):事务打算在表的某几行上加排他锁时,先申请 IX 锁。

意向锁提高了锁的性能,避免表级和行级锁的冲突检测时扫描整个表。

5. 自增锁(AUTO-INC Lock)

  • 专用于自增字段,保证多个事务在并发插入时生成唯一的自增值。
  • MySQL 使用一种轻量级的表锁来保证自增值的唯一性。

6. 间隙锁(Gap Lock)

  • InnoDB 特有,用于 Next-Key Locks 机制中,锁定一个范围的索引,防止其他事务在该范围内插入数据。
  • 间隙锁用于解决幻读问题,确保事务的一致性。
相关推荐
sun0077004 分钟前
mysql索引底层原理
数据库·mysql
程序员秘密基地22 分钟前
基于html,css,vue,vscode,idea,,java,springboot,mysql数据库,在线旅游,景点管理系统
java·spring boot·mysql·spring·web3
workflower3 小时前
MDSE和敏捷开发相互矛盾之处:方法论本质的冲突
数据库·软件工程·敏捷流程·极限编程
叁沐3 小时前
MySQL 11 怎么给字符串字段加索引?
mysql
Tony小周3 小时前
实现一个点击输入框可以弹出的数字软键盘控件 qt 5.12
开发语言·数据库·qt
lifallen3 小时前
Paimon 原子提交实现
java·大数据·数据结构·数据库·后端·算法
TDengine (老段)4 小时前
TDengine 数据库建模最佳实践
大数据·数据库·物联网·时序数据库·tdengine·涛思数据
Elastic 中国社区官方博客4 小时前
Elasticsearch 字符串包含子字符串:高级查询技巧
大数据·数据库·elasticsearch·搜索引擎·全文检索·lucene
Gauss松鼠会4 小时前
GaussDB应用场景全景解析:从金融核心到物联网的分布式数据库实践
数据库·分布式·物联网·金融·database·gaussdb
守城小轩5 小时前
Chromium 136 编译指南 - Android 篇:开发工具安装(三)
android·数据库·redis