【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。

在这里插入图片描述

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

相关推荐

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-06-14 20:04:01       91 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-06-14 20:04:01       97 阅读
  3. 在Django里面运行非项目文件

    2024-06-14 20:04:01       78 阅读
  4. Python语言-面向对象

    2024-06-14 20:04:01       88 阅读

热门阅读

  1. Python中的“*”和“**”

    2024-06-14 20:04:01       29 阅读
  2. 前端开发之HTTP协议认识

    2024-06-14 20:04:01       33 阅读
  3. Web前端在深圳:探索技术与创新的融合之地

    2024-06-14 20:04:01       30 阅读
  4. 系统编程 - kill,alarm,read,write

    2024-06-14 20:04:01       25 阅读
  5. 学习笔记——交通安全分析04

    2024-06-14 20:04:01       26 阅读
  6. 在Android Studio中将某个文件移出Git版本管理

    2024-06-14 20:04:01       28 阅读
  7. 好用的国内镜像源

    2024-06-14 20:04:01       19 阅读
  8. 力扣刷题总结 -- 数组26

    2024-06-14 20:04:01       26 阅读
  9. Linux之history历史指令查看

    2024-06-14 20:04:01       33 阅读
  10. Leetcode:合并两个有序链表

    2024-06-14 20:04:01       29 阅读
  11. ubuntu20.04 minio 安装为服务

    2024-06-14 20:04:01       25 阅读
  12. 查看ubuntu中的分区是什么类型的

    2024-06-14 20:04:01       29 阅读