数据库中的锁

数据库篇——锁 在为数据行加共享 / 排他锁之前,InooDB 会先获取该数据行 所在数据表的对应意向锁。 阅读详情

提及事务之间的相互影响时,介绍了脏读、幻读等几种类型的数据错误,为更好避免发生这些错误,引入了对资源的锁定。锁定的存在使得一个事务对他自己的数据块进行操作时,另外一个事务不能插足这个数据块。

锁的分类

从数据库系统的角度,锁模式可分为以下6 种类型:

  • 共享锁(S):又叫 他读锁。可以并发读取数据,但不能修改数据。也就是说当数据资源上存在共享锁时,所有的事务都不能对该数据进行修改,直到数据读取完成,共享锁释放。

排它锁(X):又叫 独占锁、写锁。对数据资源进行增删改操作时,不允许其它事务操作这块资源,直到排它锁被释放,从而防止同时对同一资源进行多重操作。

更新锁(U):防止出现 死锁 的锁模式,两个事务对一个数据资源进行先读取再修改的情况下,使用共享锁和排它锁有时会出现死锁现象,而使用更新锁就可以避免死锁的出现。

资源的更新锁一次只能分配给一个事务,如果需要对资源进行修改,更新锁会变成排它锁,否则变为共享锁。

意向锁:表示 SQL Server 需要在 层次结构中的某些底层资源上 获取共享锁或排它锁。例如,放置在 表级 的 共享意向锁 表示事务打算在表中的页或行上放置共享锁。在表级设置意向锁可防止另一个事务随后在包含那一页的表上获取排它锁。

意向锁可以提高性能,因为 SQL Server 仅在 表级 检查意向锁来确定事务是否可以安全地获取该表上的锁,而无须检查表中的每行或每页上的锁以确定事务是否可以锁定整个表。

意向锁包括意向共享 (IS)、意向排它 (IX) 以及与意向排它共享 (SIX)。

架构锁:在执行 依赖于表架构的操作 时使用。架构锁的类型为:架构修改 (Sch-M) 和架构稳定性 (Sch-S),执行表的数据定义语言 (DDL)操作(例如添加列或除去表)时使用架构修改锁,当编译查询时,使用架构稳定性锁。

大容量更新锁(BU):向表中大容量复制数据并指定了 TABLOCK 提示时使用。 大容量更新锁允许进程将数据并发地大容量复制到同一表,同时防止其它不进行大容量复制数据的进程访问该表。

事务隔离级别与锁的关系

  • 在 读取未提交 隔离级别下,读取数据不需要加 共享锁,这样就不会跟被修改的数据上的 排他锁 冲突;
  • 在 读取已提交 隔离级别下,读操作需要加 共享锁,但是在语句执行完以后释放共享锁;
  • 在 可重复读 隔离级别下,读操作需要加 共享锁,但是在事务提交之前并不释放共享锁,也就是必须等待事务执行完毕以后才释放共享锁;
  • 可串行化 是限制性最强的隔离级别,因为该级别 锁定整个范围的键,并一直持有锁,直到事务完成。

什么是死锁?如何解决死锁?

死锁是指两个或多个事务在同一资源上相互占用,并请求锁定对方的资源,从而导致恶性循环的现象。

常见的解决死锁的方法

  • 如果不同程序并发存取多个表,尽量约定 以相同的顺序访问表,可以大大降低死锁机会;
  • 在同一个事务中,尽可能做到 一次锁定所需要的所有资源,减少死锁产生概率;
  • 对于非常容易产生死锁的业务部分,可以尝试使用 升级锁定颗粒度,通过 表级锁 定来减少死锁产生的概率

什么是乐观锁和悲观锁?如何实现?

悲观锁:假定会发生并发冲突,屏蔽一切可能违反数据完整性的操作。在查询完数据的时候就把事务锁起来,直到提交事务。这对于长事务来讲,可能会严重影响系统的并发处理能力。实现方式:使用数据库中的锁机制。

乐观锁:假设不会发生并发冲突,只在提交操作时检查是否违反数据完整性。乐观锁适用于 读多写少 的应用场景,这样可以提高吞吐量。实现方式:一般会使用版本号机制或 CAS 算法实现。

数据库中的锁机制 数据库锁机制是数据库管理系统(DBMS)中实现并发控制的核心工具,用于确保事务的原子性、一致性、隔离性(ACID特性中的隔离性)。锁机制通过限制事务对数据的访问和修改权限,避免脏读、不可重复读和幻读等问题。锁的分类包括按粒度划分的行级锁、表级锁、页级锁和数据库级锁,以及按类型划分的共享锁、排他锁、意向锁、乐观锁和悲观锁。每种锁类型有其特定的工作原理、适用场景和代码示例。例如,共享锁允许多个事务同时读取同一资源,而排他锁则独占资源,禁止其他事务读取或修改。行级锁适用于高并发写入场景,而表级锁适用于批量操作 阅读详情

相关推荐

MySQL数据库中的锁有哪些?

MySQL数据库中的锁有哪些?

Twinkle_sone的博客 1249

数据库锁全集

你还不知道数据库有哪些锁吗?还不知道mysql锁使用场景吗?

LQ19900221的博客 3695

mysql数据库中的触发器,锁以及视图

锁(locking)是控制多个事务并发访问的一种机制。它允许多个事务同时对数据库进行修改,但确保在任何时候只有一个事务可以修改特定的数据。视图是存放在数据库中的一张虚拟表,视图的结果是由一个或者多个查询结果组成。

niaixiao1987的博客 2323

什么是数据库锁(Lock)?有哪些类型的锁

数据库锁是一种机制,用于协调多个并发事务对数据库中数据的访问。当多个事务同时尝试对相同的数据进行读取或写入操作时,可能会引发数据一致性问题。数据库锁通过限制并发事务的操作,以确保数据的完整性和一致性。共享锁(Shared Lock):也称为读锁。允许多个事务同时获取共享锁,以进行读取操作。共享锁之间不会互斥,允许并发读取。但是,共享锁与排他锁之间互斥,一个事务持有共享锁时,其他事务无法获得排他锁。排他锁(Exclusive Lock):也称为写锁。排他锁是互斥的,只允许一个事务持有。

stormjun的博客 6738

MySQL 中的数据库锁和表锁

在数据库操作中,锁是保障数据一致性的重要机制之一。MySQL 中的锁机制可以有效地防止并发访问带来的数据错误。本文将以 Java 语言为例,深入探讨 MySQL 中的数据库锁和表锁,包括其核心原理、源码解读、Java 实现方法及其应用场景。本文从 MySQL 锁机制的基本概念出发,详细分析了数据库锁和表锁的工作原理,并结合实际应用场景,提供 Java 代码示例。通过深入理解 MySQL 锁的种类、作用和实现方法,读者可以更好地掌握 MySQL 中的锁机制及其在实际开发中的使用。

喵手的博客 934

MSP430项目设计:2020年TI杯大学生电子设计竞赛 坡道行驶电动小车(C题)循迹小车(分享项目展示视频与源码)

文章目录题目要求一、硬件设计二、理论分析与计算三、电路与程序设计四、测试方案与测试结果五、项目展示 哔哩哔哩项目展示视频:https://www.bilibili.com/video/BV1oz4y1d7mH/ 百度网盘资料链接:https://pan.baidu.com/s/1PC-lkSORH_XCgIG-u3HCog 提取码:c7zz 取走记得点赞啊! 题目要求 1.任务 利用TI的MSP430/MSP432平台,设计制作一个四轮电动小车。要求小车能沿着指定路线在坡道上自动循迹骑线行驶。小车必须独立

mbs706的博客 4万+

MySQL数据库的锁详解

目录悲观锁悲观锁按使用性质分类共享锁(S锁)排他锁(X锁)更新锁(U锁)悲观锁按作用范围分类(按锁的粒度分类)行锁表锁悲观锁的实现乐观锁乐观锁的实现版本号时间戳待更新字段所有字段悲观锁的优缺点乐观锁的优缺点乐观锁与悲观锁的选择 数据库锁的种类一般分为两种:一种是悲观锁,一种乐观锁。 悲观锁 悲观锁(Pessimistic Lock)具有强烈的独占和排他特性,它指的是对数据被外界修改持保守态度,因此,在整个数据处理过程中,将数据处于锁定状态。悲观锁的实现,往往依靠数据库提供的锁机制。传统的关系数据库里用到了很

TABE_的博客 1万+

Verilog与综合:数字逻辑的代码化革命及其未来挑战

本文深入探讨Verilog硬件描述语言与逻辑综合技术在数字芯片设计中的革命性作用。Verilog实现了数字逻辑的代码化描述,而综合技术则将其自动转换为门级网表,大幅提升设计效率。文章重点分析了在先进工艺节点下面临的时序、功耗和物理效应等挑战,并展望了AI驱动综合优化的未来发展方向。

postgres8guard的博客 802

Oracle数据库中的锁

数据库锁 数据库是一个多用户使用的共享资源。当多个用户并发地存取数据时,在数据库中就会产生多个事务同时存取同一数据的情况。若对并发操作不加控制就可能会读取和存储不正确的数据,破坏数据库的一致性。 在数据库中有两种基本的锁类型:排它锁(Exclusive Locks,即X锁)和共享锁(Share Locks,即S锁)。当数据对象被加上排它锁时,其他的事务不能对它读取和修改;加了共享锁的数据对象可...

一只苟延残喘的卑微蝼蚁 1万+

银河麒麟v10-arm SEALOS离线部署k8s集群(v1.22.8)

示例 如果你想保存一个名为 "my_snapshot" 的 etcd 快照到指定的对象路径你可以使用以下命令: sealos etcd save --backupPath /root --name my_snapshot 如果文件名带时间戳:my_snapshot$(date +"%Y%m%d_%H%M%S") 会生成一个形如 20230913_143045 的时间戳。--restorePath string:指定快照恢复目录(默认为 "/opt/sealos/etcd-restore")。

xjudt的博客 3288

uniapp实战:mui-player插件如何完美适配m3u8/flv直播流(附完整代码)

本文详细介绍了如何在Uniapp中使用mui-player插件完美适配m3u8和flv直播流,提供从基础配置到高级优化的全流程解决方案。通过动态加载策略、响应式布局和内存管理,实现跨平台稳定播放,适用于企业级直播应用开发。

weixin_29001655的博客 237

数据库中的锁mssql database lock

锁(Lock)是在多用户环境下对资源访问的一种限制。     机制当对一个数据源加锁后,此数据源就有了一定的访问限制。     我们就称对此数据源进行了“锁定”。在SQL Server中,可以对以下的对象进行锁定:     数据行(Row):数据页中的单行数据;     索引行(Key):索引页中的单行数据,即索引的键值;     页(Page):页是SQL Server 存取数据的基本

飞翔的大象 1055

【异常】Nacos 2.x 核心报错:Server check fail (gRPC 端口连不通) 深度排查

如果 Nacos 运行在 K8s 中,需确保对应的Servicemetadata:spec:ports:port: 8848port: 9848 # 必须暴露此端口selector:app: nacos在 Nacos 2.x 时代,“端口成套出现”是基础设施配置的基本要求。遇到连接失败时,首要检查的不是业务配置,而是网络链路上主端口 + 1000的 TCP 通讯是否被放行。更多关于 AI + 教育领域的干货,可以关注我的微信公众号一时间获取哦~

奶爸的编程之路,也就一周冷个三天 325

Java中的锁和数据库的锁

面试中经常被问到锁,Java中有锁,数据库中也有锁,这两个中的锁都是怎么分类的呢?有两篇博客关于这个问题讲的特别好,详见下文~ Java中的锁 在读很多并发文章中,会提及各种各样锁如公平锁,乐观锁等等,这篇文章介绍各种锁的分类。介绍的内容如下: 公平锁/非公平锁 可重入锁 独享锁/共享锁 互斥锁/读写锁 乐观锁/悲观锁 分段锁 偏向锁/轻量级锁/重量级锁 自旋锁 上面是很多...

qq_28323595的博客 4729

逆向工具:一文讲述 Ghidra 的详细使用

Ghidra是由NSA开源的一款功能强大的逆向工程框架,支持多平台、多架构和多种文件格式分析。本文详细介绍了Ghidra的核心优势、安装配置方法、主界面功能模块,并通过一个CrackMe示例演示了完整的逆向分析流程。文章还讲解了高级功能如交叉引用、控制流图分析、数据类型重建和脚本自动化等,最后提供了常见文件格式的分析技巧。作为IDA Pro的免费替代方案,Ghidra适合个人学习、教学和中小项目使用。(149字)

数据知道的博客 4347

【PSINS工具箱】159联邦滤波器代码优化与注释、运行结果、文字性解释。15维状态量、9维观测量,联邦滤波与集中式滤波对比。完整代码可订阅后查看

基于工具箱的联邦滤波代码,15维状态量、9为观测量

985工科博士毕业,专攻定位、导航和滤波等算法研究。从业10年,主要使用MATLAB 486

数据库中的几种锁

以 mysql innoDB 为例,数据库的锁有 排他锁,共享锁,意向锁,自增锁,间隙锁,锁的范围有包括,行锁,表锁 ,区间锁。

qq_24428851的博客 1779

AD快速上手笔记

本文详细介绍了使用Altium Designer从零创建PCB项目全流程:新建工程、绘制原理图(元件放置、连线、电源端口)、编译检查、生成PCB、布局布线(含铺铜)、DRC检查及输出Gerber与钻孔文件。重点强调了库选择、参数修改、层切换、铺铜设置和生产文件导出规范,确保设计无误,便于顺利下单生产。

qq_53529450的博客 42

数据库中的锁:从行锁到表锁的升级

在数据库中,锁是一种非常重要的机制,它保证了数据的一致性和完整性。然而,如果不当使用,锁也可能导致一些问题,例如降低系统性能,甚至导致死锁。在这篇文章中,我们将讨论一种特定的锁问题——锁升级(Lock Escalation)。

2401_83070016的博客 2799

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

Java中的各种锁和数据库中的锁

Java中的锁 公平和非公平锁: 公平锁是指多个线程按照申请锁的顺序来获取锁 非公平锁即打破这个顺序,后来的线程也可以提前获取锁。 在ReentrantLock中可以通过改变构造方法参数,变化锁。但是在synchronized,则默认是非公平锁,无法更改。 可重入锁和不可重入锁 可重入锁:同一个线程在持有锁的前提下,可以多次获取成功锁。 reentrantLock:通过重写AQS的tryacquire方法实现。首先,判断当前是否可以获取锁,不可以再判断当前线程是不是获取了锁的线程。

天上飞的云传奇 1921

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

ORACLE数据库中的锁体系大全,TX锁,TM锁,死锁等锁异常,锁的级别及触发方式

Oracle数据库锁机制概述 Oracle数据库锁机制主要用于保障并发操作下的数据一致性和数据库稳定性。锁分为三大类:DML锁(保护数据操作)、DDL锁(保护数据字典结构)和内部锁/闩(保护内核内存结构)。其中DML锁又包含TX行级锁和TM表级锁,TM锁细分0-6级(无锁、空锁、行级共享锁、行级排他锁、共享锁、共享行级排他锁、排他锁)。通过显式锁定(如LOCK TABLE命令)或隐式锁定(DML操作自动获取)来管理并发访问,事务结束后自动释放锁资源。合理使用锁机制可避免并发冲突、死锁等问题。

shanbenwuyou的博客 1550

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

Mysql数据库中的各种锁

在介绍InnoDB与MyIsam的区别时,提到了:InnoDB支持表、行(默认)级锁,而MyISAM支持表级锁 本文便着重对Mysql数据库中的锁进行介绍 概述 相对其他数据库而言,MySQL的锁机制比较简单,其最显著的特点是不同的存储引擎支持不同的锁机制。 MySQL大致可归纳为以下3种锁: 表级锁:开销小,加锁快;不会出现死锁;锁定粒度大,发生锁冲突的概率最高,并发度最...

张花生的博客 6万+
上一篇: 常用SQL语句整理
下一篇: Redis常见问题整理
ZackNing
博客等级 码龄8年 1粉丝 11原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值