MYSQL之锁机制

什么是锁机制?

MySQL的锁机制是数据库中用于管理和控制对共享资源并发访问的一种机制。在多用户环境下,不同的用户可能同时对同一数据进行读写操作,如果没有适当的锁机制,就可能出现数据不一致或脏读等问题。

锁分类

1.从数据库的操作类型上分:

  • 读锁(共享锁,S锁(Shared)):):针对同一份数据,多个读操作可以同时进行而不会互相影响
  • 写锁(排它锁,X锁(eXclusive)):当前写操作没有完成前,它会阻断其他写锁和读锁,数据修改操作都会加写锁,查询也可以通过for update加写锁
  • 意向锁(Intention Lock):又称I锁,针对表锁,主要是为了提高加表锁的效率,是mysql数据库自己加的。当有事务给表的数据行加了共享锁或排他锁,同时会给表设置一个标识,代表已经有行锁了,其他事务要想对表加表锁时,就不必逐行判断有没有行锁可能跟表锁冲突了,直接读这个标识就可以确定自己该不该加表锁。特别是表中的记录很多时,逐行判断加表锁的方式效率很低。而这个标识就是意向锁。

    意向锁主要分为:

    意向共享锁,IS锁,对整个表加共享锁之前,需要先获取到意向共享锁。

    意向排他锁,IX锁,对整个表加排他锁之前,需要先获取到意向排他锁。

2.从粒度上分: 

  • 行锁:每次只锁住一行记录开销大,加锁慢;会出现死锁;锁定粒度最小,发生锁冲突的概率最低,并发度最高

InnoDB相对于MYISAM的最大不同有两点:

  • InnoDB支持事务(TRANSACTION)
  • InnoDB支持行级锁

注意,InnoDB的行锁实际上是针对索引加的锁(在索引对应的索引项上做标记),不是针对整个行记录加的锁。并且该索引不能失效,否则会从行锁升级为表锁。(RR级别会升级为表锁,RC级别不会升级为表锁)

  • 页锁:锁住一整页,通常是16kb,是innodb所特有的。锁定的数据资源比行锁要多,因为一个页中可以有多个行记录。当我们使用页锁的时候,会出现数据浪费的现象,但这样的浪费最多也就是一个页上的数据行。页锁的开销介于表锁和行锁之间,会出现死锁。锁定粒度介于表锁和行锁之间,并发度一般。
  • 表锁:每次操作锁住整张表。开销小,加锁快;不会出现死锁;锁定粒度大,发生锁冲突的概率最高,并发度最低;一般用在整表数据迁移的场景。
  • 间隙锁

间隙锁,锁的就是两个值之间的空隙,间隙锁是在可重复读隔离级别下才会生效。

上节课讲过,Mysql默认级别是repeatable-read,有幻读问题,间隙锁是可以解决幻读问题的。

假设account表里数据如下:

那么间隙就有 id 为 (3,10),(10,20),(20,正无穷) 这三个区间,在Session_1下面执行如下sql:

select * from account where id = 18 for update;

则其他Session没法在这个(10,20)这个间隙范围里插入任何数据。

  • 临键锁(Next-key Locks)

Next-Key Locks是行锁与间隙锁的组合。

3.从性能上分

乐观锁(用版本对比或CAS机制)和悲观锁,乐观锁适合读操作较多的场景,悲观锁适合写操作较多的场景,如果在写操作较多的场景使用乐观锁会导致比对次数过多,影响性能

总结

锁机制对于维护数据库的ACID特性(原子性、一致性、隔离性、持久性)至关重要。正确地使用锁可以提高数据库的并发性能,但不当的锁使用也可能导致性能下降或死锁。因此,理解和合理地应用MySQL的锁机制对于我们开发者来说非常重要。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/644332.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

凌恩病原微生物检测系统上线啦,助力环境病原微生物检测

病原微生物是指能够引起人类或动物疾病的微生物,包括病毒、细菌、真菌、衣原体和支原体等。病原微生物可以通过空气、体液等介质传播,危害人体健康,造成财产损失。因此,快速、准确地检测病原微生物对于疫情防控和保障人民生命健康…

通义千问(Qwen)AI大模型-系列_2

一、通义千问系列模型 1、CodeQwen1.5-7B-Chat CodeQwen1.5是Qwen1.5的代码特定版本。它是一种基于变换器的纯解码器语言模型,在大量代码数据上进行预训练。 强大的代码生成能力和在一系列基准测试中具有竞争力的性能;支持长上下文理解和生成,上下文长度…

【驱动】AM437x中出现很多bioset进程,杀不掉,有影响吗?

1、问题描述 查看linux系统进程时,发现很多bioset进程 2、问题分析 1)bioset进程是内核线程 这些bioset进程与Linux内核的块I/O(Block Input/Output)层有关,它们是内核线程,不是用户空间的进程。 Linux的块I/O层负责管理磁盘和其他块设备的数据传输。当系统读写磁盘…

程序员英语之Spring篇

spring.io/quickstart 本期课程讲解Spring官网的快速上手页面 官网地址 https://spring.io/quickstart Spring Quickstart Guide Spring 快速开始指南 Guide 指南 What you’ll build 接下来你将要构建的是什么? build 构建 You will build a classic “H…

AI+BI第二弹:QuickBI已支持智能搭建智能问数

缘起:一场主题分享 吴恩达(Andrew Ng)教授,DeepLearning.AI和AI Fund的创始人,在美国红杉资本于2024年3月26日举办的AI Ascent活动中,谈到了人工智能代理工作流程的未来及其潜力,这些工作流程有…

DC-DC电源纹波测量注意事项

对于DC-DC电源纹波的测量,如果不清楚干扰源以及他们之间的相互影响,仅仅用一个示波器的标准探头连接到转换器上,然后从显示屏上读取数据,这么做往往是不可靠的。差模(DM)和共模(CM)干…

linux 安装cmake

文章目录 一.有三种安装方式1.通过在官网上下载Binary distributions或者Source distributions2.通过在官网上下载Source distributions或者在github上克隆cmake的源码(未编译)3.官网上下载Source distributions的.sh脚本文件(1)**使用软连接添加系统变量**(2)使用配…

申请泛域名证书步骤

泛域名证书的广泛应用范围: 泛域名证书不同于普通的单域名数字证书和多域名数字证书,可以一次以一张证书对应无限多的域名,在功能性和方便性上远优于一般证书。 单域名证书顾名思义,一张证书只对应一个独立域名,多域…

[笔试训练](五)

013 游游的you__牛客网 (nowcoder.com) 题目&#xff1a; 题解&#xff1a; 组成一个you需要一个o且能得2分&#xff0c;而组成相邻字母oo需要两个o&#xff0c;只能得1分。优先考虑组成尽可能多的you&#xff0c;再考虑剩下的o&#xff0c;放一起。 #include <iostream…

Llama 3问世:迄今为止的最强开源大语言模型

导语 最近Meta发布了其研发的第三代开源大语言模型Llama 3&#xff0c;并宣称Llama 3为迄今为止的最强开源大语言模型&#xff0c;本文对其进行简要学习记录。若想了解之前版本的Llama模型&#xff0c;可参考我之前写的论文笔记&#xff1a;Llama、Llama 2、CodeLlama。 要点…

国产电子耳标识读器GALLAGHER盖力格平替

GALLAGHER盖力格是一家总部位于新西兰的全球技术公司&#xff0c;在动物管理方面处于全球领先地位。KEZMO科智牧对标GALLAGHER盖力格旗下的RFID电子耳标识读器&#xff0c;凭借自身强劲的研发实力&#xff0c;研发生产了属于我们自己的国产RFID电子耳标识读器&#xff1a;JY-L8…

报名 | Qt汽车及工业行业解决方案及实战训练 深圳站(5月15日 星期三)

加入我们的Qt技术培训&#xff0c;探索跨平台应用开发的无限可能&#xff01;本次培训将深入Qt框架&#xff0c;涵盖从基础概念到高级功能的全方位知识&#xff0c;无论您是刚入门的新手还是希望提升技能的资深开发者&#xff0c;都能在此找到适合自己的学习路径。通过实践案例…