MySQL史上最全锁分类-持续更新中

本文详细介绍了MySQL中的锁分类,包括全局锁、表级锁、行锁以及乐观锁和悲观锁的区别。强调了全局锁的高开销和避免在生产环境中的使用,以及行锁的使用场景和风险。
摘要由CSDN通过智能技术生成

MySQL锁分类

1、锁分类概述总结

image-20231228100224125

2、全局锁

全局锁针对整个数据库的锁,求中包括读锁和写锁

读锁(共享锁): 他阻止其他用户更新数据,但他允许他们读取数据,这在需要一段时间内保持数据一致性很重要
**写锁(排它锁):**他会阻止其他用户读取和更新数据,这在你需要修改一些大量数据,并且不希望其他用户在这堵段时间内干扰有很大作用。

注意:全局锁得开销非常大,因为他会阻止其他所有的数据修改操作,并且在高并发情况可能导致大量的的线程等待锁定,因为应避免在生产环境中使用全局锁,或者尽量减少使用全局锁持有时间,只有在INNODB引擎中使用

在数据库中开启(读写)锁

FLUSH  TABLES WITH READ LOCK
FLUSH  TABLES WITH WRITE LOCK

释放锁

UNLOCK TABLES

3、表级锁

表级锁是mysql中最基本的锁策略,特点是开销小,加锁快,不会出现死锁,锁力度大,发生锁冲突的概率最高,并发度最低

表锁得两种模式:

表共享锁(表读锁):允许一个事务锁定的表进行读取操作,不允许其他事物对其进行写操作,但是可以进行读操作,读锁之间是不会相互阻塞
表独占锁(表写锁):允许一个事务锁定的表进行读取和写入(更新)操作,但对其他任何事务都不能对该表进行任何操作,必须等待表写锁结束,写锁会阻塞其他所有锁,包括读锁和写锁。

在MySQL中对于MyISAM引擎表,读操作会自动加上读锁,对与写操作,会自动加上写锁
在InnoDB引擎汇总在必要情况下会使用表锁,

表锁使用场景
image-20231228163651334

哪些命令会发生表级锁
image-20240116105739626

表锁使用案例

-- 员工表开启表锁
LOCK TABLES tb_employee READ
-- 查看表锁使用情况
SHOW OPEN TABLES WHREE IN_USE>0
-- 更新表是不能进行更新的
UPDATE tb_employee SET NAME="张三" WHERE id=1
-- 释放所有表锁
UNLOCK TABLES 

表锁得风险

image-20240116110340179

4、行锁

image-20240116110914945

注意:行锁只能在事务中使用,

行锁使用场景
image-20240116111109441

哪些场景会导致发生行锁

image-20240116111253897

使用案例

-- 开启事务(行锁只能在事务中使用)
START TRANSACTION
-- 开启一个排它锁
select * from tb_employee where id = 1 for update
-- 开启一个共享锁
-- select * from tb_employee where id = 1 lock in share mode
commit
-- 查看所有锁情况
select * from performance_schema.data_locks


行锁有哪些风险
image-20240116112027798

5、乐观锁悲观锁

乐观锁:

image-20240116134818875

乐观锁使用场景
image-20240116134920517

乐观锁得缺点

image-20240116170049082

6、悲观锁

image-20240116170214911

悲观锁得缺点
image-20240116170652864

7、意向锁共享锁和意向排它锁

image-20240116170925761

image-20240116171227427

8、临键 锁

image-20240118143213543

9、间隙锁

image-20240118143510768

间隙锁得优缺点
image-20240118144011010

  • 6
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值