ToB企服应用市场:ToB评测及商务社交产业平台
标题:
MySQL锁分类
[打印本页]
作者:
篮之新喜
时间:
昨天 00:34
标题:
MySQL锁分类
一、按锁的粒度划分
全局锁
界说
:锁定整个数据库实例,克制所有写操作,确保数据备份同等性。
加锁方式
:通过FLUSH TABLES WITH READ LOCK实现,释放需实验UNLOCK TABLES。
应用场景
:适用于全库逻辑备份,但会壅闭所有数据变更。
表级锁
分类
:
表锁
:分为读锁(共享锁)和写锁(排他锁),由LOCK TABLES ... READ/WRITE显式控制。
元数据锁(MDL)
:自动在访问表时添加,防止表布局变更与读写冲突,事件提交后释放。
意向锁
:InnoDB特有,分为意向共享锁(IS)和意向排他锁(IX),用于快速判断表中是否有行级锁。
特点
:开销小、加锁快,但并发度低,易引发锁冲突。
存储引擎支持
:MyISAM仅支持表锁;InnoDB支持表锁与行锁。
行级锁
实现机制
:由InnoDB引擎支持,基于索引实现。若SQL未使用索引,行锁会退化为表锁。
具体类型
:
记录锁(Record Lock)
:锁定单行记录。
间隙锁(Gap Lock)
:锁定索引记录间的间隙,防止其他事件插入数据。
临键锁(Next-Key Lock)
:记录锁+间隙锁的组合,锁定左开右闭的区间,解决幻读问题。
特点
:开销大、加锁慢,可能引发死锁,但并发度高。
二、按锁的属性划分
共享锁(S锁)
界说
:允许其他事件读取但禁止写入。
加锁方式
:通过SELECT ... LOCK IN SHARE MODE或SELECT ... FOR SHARE实现。
应用场景
:适用于多事件并发读取同一数据。
排他锁(X锁)
界说
:禁止其他事件读写锁定对象。
加锁方式
:通过SELECT ... FOR UPDATE或更新语句(如UPDATE)自动添加。
应用场景
:数据修改或需要独占访问的场景。
三、按加锁机制划分
悲观锁
原理
:假定并发冲突一定发生,操作前先获取锁(如共享锁或排他锁)。
实现方式
:通过数据库内置锁机制(如FOR UPDATE)实现。
乐观锁
原理
:假定冲突较少,通过版本号或时间戳校验数据是否被修改。
实现方式
:使用WHERE条件检查数据版本,若冲突则重试或回滚。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/)
Powered by Discuz! X3.4