当前位置: 首页 > news >正文

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

在这里插入图片描述

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

相关文章:

  • LangChain入门学习笔记(一)——Hello World
  • [ROS 系列学习教程] 建模与仿真 - 使用 Arbotix 控制机器人
  • java:使用JSqlParser给sql语句增加tenant_id和deleted条件
  • 华三HCL模拟器安装及华三防火墙配置
  • MySQL基础---库的操作和表的操作(配着自己的实操图,简单易上手)
  • 【6】第一个Java程序:Hello World
  • pytorch神经网络训练(AlexNet)
  • 构建大语言模型友好型网站
  • Git代码冲突原理与三路合并算法
  • 聆思CSK6大模型开发板英语评测类开源SDK详解
  • 通用大模型VS垂直大模型,你更青睐哪一方?
  • Python第二语言(十四、高阶基础)
  • python脚本之调用其他目录脚本
  • C# 事件(Event)定义及其使用
  • 2.负载压力测试
  • 【AI工具】jupyter notebook和jupyterlab对比和安装
  • Linux 基本指令3
  • 在Linux系统中,可以使用OpenSSL来生成CSR(Certificate Signing Request)、PEM格式的公钥和PEM格式的私钥。
  • 【2024最新华为OD-C/D卷试题汇总】[支持在线评测] 团队派遣(100分) - 三语言AC题解(Python/Java/Cpp)
  • Python数据分析与机器学习在医疗诊断中的应用
  • vite.config.js如何使用env的环境变量
  • MySql几十万条数据,同时新增或者修改
  • 如何提高MySQL DELETE 速度
  • 本地Zabbix开源监控系统安装内网穿透实现远程访问详细教程
  • 从Android刷机包提取System和Framework
  • 分布式光纤测温DTS与红外热成像系统的主要区别是什么?
  • python数据分析-问卷数据分析(地理课)
  • 【ARM64 常见汇编指令学习 19.3 -- ARMv8 三目运算指令 csel 详细介绍】
  • Docker 安装部署(CentOS 8)
  • Python自动化