【MySQL】锁机制

创作不易,本篇文章如果帮助到了你,还请点赞 关注支持一下♡>𖥦<)!!
主页专栏有更多知识,如有疑问欢迎大家指正讨论,共同进步!

给大家跳段街舞感谢支持!ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ ኈ ቼ

在这里插入图片描述


锁对数据并发访问的一致性、有效性尤其重要,锁冲突影响数据库的性能。

一、数据库锁分类

按照锁属性分为:

  • 共享锁(Share Lock):又称为读锁、S 锁,多个事务对于同一数据可以共享一把锁,只可读不可改。支持并发读取
  • 排他锁(eXclusive Lock):又称为写锁、X 锁,一个事务获得了一个数据的排他锁,其他事务就不能获得锁,可读可改

按照锁的粒度分为:

  • 行锁(InnDB):只锁定某一行或多行,不对其他行有影响。开销较大;可能会出现死锁;锁粒度小,并发度高
  • 表锁(InnDB、MyIsam):锁整个表。开销小;不会出现死锁;锁粒度大,可能发生锁冲突
  • 页锁:锁一页数据。开销和速度介于行锁和表锁之间;可能会出现死锁;粒度一般。

二、锁的使用情况

  1. 共享锁(Share Lock):
    • 主要用于数据的并发读取操作,允许多个事务同时读取同一数据资源,但不允许对数据进行修改。
    • SELECT ... LOCK IN SHARE MODE 对所选数据加上共享锁。
SELECT * FROM xx_table WHERE xx_condition LOCK IN SHARE MODE;
  1. 排他锁(eXclusive Lock):
    • 主要用于数据的修改操作,当一个事务获得某个数据的排他锁后,其他事务无法对该数据进行任何操作(包括读取和修改)。
    • SELECT ... FOR UPDATE 对所选数据加上排他锁。
    • 排他锁常用于确保数据的完整性和一致性,特别是在需要对数据进行修改的场景中。
SELECT * FROM xx_table WHERE xx_condition FOR UPDATE;
  1. 行锁(InnoDB):
    • 行锁适用于高并发的场景,能够最大程度地减少锁冲突,提高并发性和系统吞吐量
    • InnoDB存储引擎支持行锁,因此在使用InnoDB作为数据库引擎时,可以充分利用行锁的优势
  2. 表锁(InnoDB、MyISAM):
    • 表锁通常用于对表进行**DDL操作(如ALTER TABLE)**或备份等需要操作整张表的情况。
    • MyISAM存储引擎只支持表锁,因此在高并发的读写场景下,MyISAM的性能可能不如InnoDB。

在这里插入图片描述

大家的点赞、收藏、关注将是我更新的最大动力! 欢迎留言或私信建议或问题。
大家的支持和反馈对我来说意义重大,我会继续不断努力提供有价值的内容!如果本文哪里有错误的地方还请大家多多指出(●'◡'●)
  • 4
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

天喜Studio

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值