【数据库】Mysql的锁类型

embedded/2024/10/25 3:28:39/

Mysql中的锁机制主要是为了保证数据的一致性和完整性,在并发的情况下起着至关重要的作用。其中锁的类型主要是分为以下几种:

按照粒度分类

全局锁:对于整个数据库实例进行枷锁,加锁后整个实例就处于只读的状态。局锁通常用于需要执行一些需要长时间运行或对整个数据库进行变更的操作,如备份、恢复等

表级锁:对于整个表进行枷锁,阻止其他食物对该表进行写操作(可能允许读操作,具体取决于锁的类型)。表锁粒度大,开销小,但并发度低。表锁分为表读锁和表写锁。

行级锁:对数据库表中的单独一行进行锁定,相比于表级锁,行级锁力度更小,因此在处理高并发事务的时候,能提供更好的并发性能

页级锁:在页的力度上进行锁定,锁定的数据资源比行级锁要多,因为一个页中有多个行记录。页锁的开销介于表锁和行锁之间,并发度一般。但需要注意的是,MySQL中只有BDB存储引擎支持页锁

按照模式分类

乐观锁:假设在多个事务同时访问同一条数据时,冲突发生的概率较低,因此在操作数据时不会立即进行锁定,而是在提交数据更改时检查是否有其他事务修改了这条数据。如果没有,就提交更改,否则就回滚事务。乐观锁在MySQL中没有内置的实现,但可以通过编程技巧(如版本号或时间戳)来实现

悲观锁:假设并发操作时会发生冲突,因此在操作期间持有锁来避免冲突。MySQL中的行级锁就是一种悲观锁的实现方式

按照属性分类

共享锁:也称为读锁,允许多个事务同时读取同一个资源,但是不可以进行写操作

 

SELECT ... LOCK IN SHARE MODE

排他锁:也称为写锁,阻止其他事务对已锁定资源进行读写操作

 

SELECT ... FOR UPDATE

其他锁类型

记录锁:记录锁是对索引记录的锁,注意,它是针对索引记录,即它只锁定记录这一行数据

间隙锁:锁定两个值之间的空隙,防止其他事务在间隙中插入或删除记录。它的存在可以解决幻读问题,需要注意,间隙锁是在可重复读隔离级别下才会生效

之所以出现幻读的问题,是因为记录之间存在缝隙,用户可以往这些缝隙中插入数据,这就导致了幻读问题。所以我们将之间的间隙锁住,就可以防止幻读的问题的

临键锁:是间隙锁加记录锁的组合,既想锁定一行,又想锁定行之间的记录,其他事务既不能更改锁定的数据,也不能插入,锁的范围是左开右闭

意向锁:用于协调事务间的加锁操作,以避免冲突和死锁的发生。例如,事务 A 加锁了 Users 表中的一行数据(行锁),而事务 B 要对整个 Users 表进行加锁(表锁),那么这个时候,如果没有意向锁,那事务 B 就会加锁成功了。而事务 B 如果加锁成功的话,那么它是可以对表中的任意数据行进行操作的,包括事务 A 加锁的那行数据,所以,这个时候就发生了锁冲突。在事务 A 添加行锁的时候,先添加意向锁,而事务 B 在添加表锁的时候,先判断一下意向锁,如果有意向锁了,它就不能加表锁了,这样避免了锁冲突,提升了加锁判断的效率

意向锁主要是分为两种:

  1. 意向共享锁(Intention Shared lock,IS):表示在某个资源上设置共享锁。也就是读锁,用于读取数据的操作,允许多个事务同时持有(共享锁),不互斥。

  2. 意向排他锁(Intention Exclusive lock,IX):表示在某个资源上设置排他锁。也就是写锁,用于修改和更新数据操作,并且同一时间只能由一个事务持有,不能和其他事务共同持有,具有互斥性和排他性


http://www.ppmy.cn/embedded/132223.html

相关文章

人工智能:未来生活与工作的变革力量

人工智能(AI)作为21世纪最具变革性的技术之一,正以前所未有的速度改变着我们的生活和工作方式。从医疗行业的突破性进展到企业运营的智能化,以及日常生活中各种智能产品的普及,人工智能正在成为现代社会不可或缺的一部…

深度生成模型文物修复--论文阅读笔记(导-6)

图像修复是计算机视觉领域最活跃的研究领域之一。它通常是一个不适定的逆问题,其中恢复的图像候选是通过近似退化图像的原始形式产生的。图像修复任务可以进一步细分为图像去噪[16]、超分辨率6和图像修复34。图像修复问题解决方法分为两类:传统的和基于深…

FastGPT上使用多种大语言模型

注册MindCraft并创建API KEY 首先我们在智匠MindCraft上注册账号并创建API KEY,参考接口调用文档,查看我们能调用哪些模型。我们可以看到这个开发平台上整合了主流的大语言模型,并且是兼容openai接口的。 docker compose 部署时修改配置文件…

了解Android中的AIDL

Android中的AIDL及其作用 一、概述 在Android开发中,AIDL(Android Interface Definition Language)是一种Android特有的接口定义语言,用于实现进程间通信(IPC)。通过AIDL,开发者可以在不同的应…

python海洋水动力

原文链接:python海洋水动力https://mp.weixin.qq.com/s?__bizMzUzNTczMDMxMg&mid2247607618&idx3&sn945a3f734c3e9d4273afa5a3e50ab565&chksmfa8264a5cdf5edb309232af17e0fda961f2fc6b4da8e8a27acc9d584bde119da7b0c60828904&token1928664218&…

攻坚金融关键业务系统,OceanBase亮相2024金融科技大会

10月15-16日,第六届中新数字金融应用博览会与2024金融科技大会(简称“金博会”)在苏州工业园区联合举办。此次大会融合了国家级重要金融科技资源——“中国金融科技大会”,围绕“赋能金融高质量发展,金融科技创新前行”…

PostGis空间(下):空间连接与空间索引

目录 1、简介2、空间连接3、空间索引3.1 索引操作3.2 空间索引的工作原理3.2.1 R-Tree 3.3 空间索引函数3.4 仅索引查询3.5 ANALYZE3.6 VACUUMing3.7 函数列表 PS 1024到啦!!! 先祝各位程序员或者想成为程序员正在奋斗中的伙伴1024程序员节快…

【Vue.js设计与实现】阅读笔记目录(持续更新)

文章目录 第一篇:框架设计概览第二篇:响应系统第三篇:渲染器第四篇:组件化第五篇:编译器第六篇:服务端渲染 第一篇:框架设计概览 【Vue.js设计与实现】第一篇:框架设计概览-阅读笔记…