MySQL中锁有哪些分类
一、按照粒度分类:
粒度越小,并发度越高,锁开销越大。
1.全局锁:
作用: 锁定整个MySQL实例(所有数据库)。
适用场景: 全库逻辑部分。(确保备份期间数据的一致性。)
实现方式: 通过 FLUSH TABLES WITH READ LOCK (FTWRL) 命令实现,加锁后所有表变为只读,更新、删除、插入等操作会被阻塞。
注意:InnoDB可通过 mysqldump –single-transaction 结合事务隔离级别避免使用全局锁(利用MVCC实现一致性读)。
2.表级锁:
作用: 锁定整个表,粒度较大,并发度低,但锁开销较小。
适用场景: MyISAM存储引擎默认锁机制(InnoDB也支持,但更常用行锁),适合读多写少的场景。
类型:
表读锁: 多个事务可以加读锁,允许读表,但阻塞写操作(包括加写锁)。
表写锁: 一个事务加锁后,独占表,阻塞其他所有读锁和写锁。
特点: MyISAM 中写锁优先级高于读锁,可能导致读请求饿死(一直等待写锁释放)。
3.行级锁:
作用: 锁定单行记录,粒度最小,并发度最高,锁开销最大。
适用场景: InnoDB存储引擎的核心锁机制,适合写操作频繁的场景(如电商订单、库存更新)。
类型:
行读锁: 事务对某行加读锁后,其他事务可以加读锁,但不能加写锁。
行写锁: 事务对某行加锁后,其他事务不能加读锁或写锁。
特点:InnoDB的行锁基于索引实现,若查询未命中索引,会升级为表锁。
二、按锁的功能划分:
1.共享锁(Shared Lock,S锁):
又称: 读锁。
特性: 多个事务可以同时持有同一资源的S锁,允许读操作,但阻塞写操作(X锁)。
加锁方式:SELECT … LOCK IN SHARE MODE (InnoDB 中,显式加读锁)。
2.排他锁(Exclusive Lock X锁):
又称:写锁。
特性:一个事务持有X锁后,其他事务不能持有该资源的S锁或X锁,独占资源用于写操作。
加锁方式:SELECT … FOR UPDATE;(InnoDB 中,显式加写锁);默认情况下,UPDATE/DELETE/INSERT 会自动加 X 锁。
三、InnoDB特有的锁(基于事务和索引):
1.意向锁:
作用: 表级锁,用于标识”事务稍后会对表中的行加S锁或X锁“,避免表锁与行锁的冲突检查效率问题。
类型:
意向共享锁(Intention Shared Lock IS锁): 事务计划对表中的某些行加S锁,加行S锁前需要先加IS锁。
意向排他锁(IX锁): 事务计划对表中的某些行加X锁,加行X锁前需要先加IX锁。
2.记录锁:
作用: 锁定索引记录本身(具体某一行),防止其他事务修改或删除该记录。
示例: WHERE id=10 id是主键,InnoDB会锁定id=10的这一行。
3.间隙锁:
作用:锁定索引记录之间的”间隙”,不包括记录本身,防止其他事务在间隙中插入新纪录。(解决”幻读”问题)。
适用场景:InnoDB的RR隔离级别(默认级别)。
示例:表中id=5、10,WHERE id BETWEEN 5 AND 10 ,会锁定(5,10)之间的间隙,阻止插入id=6、7等记录。
4.临建锁:
作用:记录锁+间隙锁的组合,锁定索引记录以及前面的间隙(左开右闭),是InnoDB RR级别下默认的行锁方式。
示例:表中id=5、10,WHERE id=10会锁定 (5,10] 区间。
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 如遇到加密压缩包,请使用WINRAR解压,如遇到无法解压的请联系管理员!
7. 本站有不少源码未能详细测试(解密),不能分辨部分源码是病毒还是误报,所以没有进行任何修改,大家使用前请进行甄别!
66源码网 » MySQL中锁有哪些分类