主页 > 软件开发  > 

MySQL锁分类

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条件检查数据版本,若冲突则重试或回滚。
标签:

MySQL锁分类由讯客互联软件开发栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“MySQL锁分类