数据库中的锁

数据库篇——锁 在为数据行加共享 / 排他锁之前,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

表格数据学习的图神经网络综述

今天学习一篇发表在中科院一区期刊《ACM Computing Surveys》的综述文章《Graph Neural Networks for Tabular Data Learning: A Survey with Taxonomy & Directions》,该刊主要刊载计算机理论方法领域的系统性综述与教程论文,注重跨学科技术融合研究,最新的影响因子为28.0。本文的目的在于通过学习这篇文章,了解关于表格数据学习点图神经网络一些基础知识。

qq_41009600的博客 800

MySQL数据库的锁详解

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

TABE_的博客 1万+

OKCC呼叫中心部署实战指南:从零搭建高效外呼系统

本文提供OKCC呼叫中心系统的完整部署实战指南,从服务器选型、操作系统准备到详细安装步骤和性能优化,帮助企业从零搭建高效外呼系统。重点介绍FreeSWITCH核心组件的安装配置技巧,以及常见问题排查方法,助力企业提升客户服务效率。

weixin_29275257的博客 164

Oracle数据库中的锁

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

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

开源大模型本地部署实战:Llama、DeepSeek、Qwen选型与工程落地指南

大语言模型(LLM)本地部署已成为AI工程化核心环节,其本质不是比拼参数量或榜单分数,而是考察模型架构、推理引擎、量化支持、IDE集成与多模态扩展能力的系统性适配。Llama以纯净Transformer结构成为通用底座,依赖llama.cpp和GGUF量化实现跨平台轻量推理;DeepSeek深度优化代码与数学推理,通过原生OpenAPI、FlashAttention-2及tensor parallelism显著降低API延迟;Qwen则采用模块化设计,支持视觉编码器(Qwen-VL)、生物计算(Qwen-B

weixin_29952383的博客 396

手把手教你用LaTeX完成Elsevier期刊投稿:附完整文件上传清单与注意事项

本文提供了一份详尽的Elsevier期刊LaTeX投稿实战指南。文章系统拆解了从稿件准备、文件上传到最终提交的全流程,重点解析了Manuscript、Figure(s)等关键文件的上传逻辑与注意事项,并附有PDF生成前后的详细检查清单,旨在帮助研究者高效、规范地完成投稿,规避常见错误。

weixin_29300931的博客 487

数据库中的锁mssql database lock

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

飞翔的大象 1055

巨某量引擎后台登录实战笔记 | Playwright自动化框架

自动化框架、Playwright、滑块、巨某量引擎、抖某音系

什么都会一点。 2080

Java中的锁和数据库的锁

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

qq_28323595的博客 4729

HFSS新手避坑指南:从零搭建T形波导功分器(含参数扫描与优化实战)

本文为HFSS新手提供T形波导功分器设计的详细指南,涵盖基础设置、建模技巧、参数扫描与优化实战。重点解析内场分析中的常见陷阱,如单位设置、波端口定义和布尔运算错误,并分享优化设计的关键步骤,帮助工程师快速掌握HFSS在微波器件设计中的应用。

weixin_27442001的博客 138

基于FSL的DTI数据预处理流程

最近在学习处理DTI数据,总结了一份应用FSL做DTI数据预处理的流程与大家交流交流。如果有错误的地方欢迎大家指正!        我用的数据是Philips的数据,如果是GE或者西门子的数据可能会有所不同。   原始数据:包括3DT1数据和高分辨率DTI数据,均是dicom格式。 工具:MRICRON和FSL,所有的命令均在Linux的终端中运行。   1.格式转换:将后缀名为dcm

zaza_zaza的博客 2万+

数据库中的几种锁

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

qq_24428851的博客 1779

C++软件调试与异常排查从入门到精通专栏介绍与文章汇总

根据近几年排查软件异常的实践与经验,系统地讲解了C++软件异常常见原因与常用排查方法,以图文并茂的方式给出具体的分析实例,带领大家逐步掌握C++软件异常排查的相关技术与要领。

dvlinker的技术专栏 23万+

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

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

2401_83070016的博客 2799

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

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

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

天上飞的云传奇 1921

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

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

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

shanbenwuyou的博客 1550

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

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、付费专栏及课程。

余额充值