学习总结与分享-数据库的事务与锁入门

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

这次的事务和锁研究,主要是MySQL数据库的innodb引擎,说到数据库,就免不了要说事务和锁机制,这是数据库最重要的组成部分。
什么是事务?
事务(Transaction)是并发控制的基本单位。所谓的事务,它是一个操作序列,这些操作要么都执行,要么都不执行,它是一个不可分割的工作单位
数据库事务(简称:事务)是数据库管理系统执行过程中的一个逻辑单位,由一个有限的数据库操作序列构成。(摘自百科)
简单通俗来说,就是将一系列对数据库的操作限定成同一个操作,这个操作的执行一定是同时执行成功或者执行失败。
那为了保证事务的正确执行,所以就有了事务的四大特性(ACID)
事务的四大特性(ACID)
1.原子性(Atomicity):事务作为一个整体被执行,包含在其中的对数据库的操作要么全部被执行,要么都不执行。
通俗来说:指所有在事务中的操作要么都成功,要么都不成功,所有的操作都不可分割,没有中间状态。一旦某一步执行失败,就会全部回滚到初始状态。
2.一致性(Consistency):事务应确保数据库的状态从一个一致状态转变为另一个一致状态。一致状态的含义是数据库中的数据应满足完整性约束。
通俗来说:指的是逻辑上的一致性,即所有操作是符合现实当中的期望的。
3.隔离性(Isolation):多个事务并发执行时,一个事务的执行不应影响其他事务的执行。
通俗来说:指不同事务之间的相互影响和隔离的程度。比如,不同的隔离级别,事务的并发程度也不同,最强的隔离状态是所有的事务都是串行化的(serializable)(即一个事务完成之后才能进行下一个事务),这样并发性也会降到最低,在保证了强一致性的情况下,性能也会受很大影响,所以在实际工程当中,往往会折中一下。
4.持久性(Durability):已被提交的事务对数据库的修改应该永久保存在数据库中。
通俗来说:简单地理解为事务执行完毕后数据不可逆并持久化存储于存储系统当中。
介绍完了事务的四大特性,我们可以发现,原子性、隔离性、持久性,这三个特性,实际中都是为了保证事务的一致性来服务的,那么在并发下什么问题会导致事务没有保持一致性呢,大概有脏读、不可重复读、幻读、丢失更新(由不可重复读这个问题延伸出来),下面举几个例子:
脏读:A事务读取B事务尚未提交的数据并在此基础上操作,而B事务执行回滚,那么A读取到的数据就是脏数据。

时间转账事务A取款事物B
T1开始事务
T2开始事务
T3查询账户余额为1000元
T4取出500元余额修改为500元
T5查询账户余额为500元(脏读)
T6撤销事务余额恢复为1000元
T7汇入100元把余额修改为600元
T8提交事务

不可重复读:事务A重新读取前面读取过的数据,发现该数据已经被另一个已提交的事务B修改过了。

时间转账事务A取款事物B
T1开始事务
T2开始事务
T3查询账户余额为1000元
T4查询账户余额为1000元
T5取出100元修改余额为900元
T6提交事务
T7查询账户余额为900元(不可重复读)

幻读:事务A重新执行一个查询,返回一系列符合查询条件的行,发现其中插入了被事务B提交的行。

时间统计金额事务A取款事物B
T1开始事务
T2开始事务
T3统计所有帐户总存款为10000元
T4新增一个存款账户存入100元
T5提交事务
T6再次统计总存款为10100元(幻读)

丢失更新:事务A覆盖事务B已经提交的数据,造成事务B所做的操作丢失或事务A撤销时,把已经提交的事务B的更新数据覆盖了。总的来说都是由不可重复读延伸出去的其他问题,就举一个代表性的例子来说

时间转账事务A取款事物B
T1开始事务
T2开始事务
T3查询账户余额为1000元
T4查询账户余额为1000元
T5取出100元将余额修改为900元
T6提交事务
T7汇入100元将余额修改为1100元
T8提交事务
T8查询账户余额为1100元(丢失更新)

看完了这些为保持数据一致性存在的问题之后,那么如何解决这些问题呢。这里就涉及到了事务的隔离性,为了保证事务的隔离性,就有了事务的四种隔离级别,其中每种隔离级别都对应的解决了一些问题。

  • 隔离级别(从小到大):
    1. read uncommitted:读未提交
    * 解决的问题:解决了第一种丢失更新:事务A覆盖事务B已经提交的数据,造成事务B所做的操作丢失或事务A撤销时,把已经提交的事务B的更新数据覆盖了。
    * 产生的问题:脏读、不可重复读、幻读
    2. read committed:读已提交 (Oracle)
    * 解决的问题:脏读
    * 产生的问题:不可重复读、幻读
    3. repeatable read:可重复读 (MySQL默认)
    * 解决的问题:不可重复读、第二种丢失更新:事务A撤销时,把已经提交的事务B的更新数据覆盖了
    * 产生的问题:幻读
    4. serializable:串行化
    * 解决了所有会产生的问题。所有的事务都会按照顺序依次执行,但这样会严重影响数据库在并发下的读写性能。

那么数据库又是怎么样保证数据的隔离性的呢,就有了锁机制,由数据库为各条记录或者各个表来加锁,从而完成事务的隔离。那数据库又是怎么确定是哪条记录需要加锁呢?之前我们研究数据库底层的存储结构了解到数据库的innodb引擎是由B+树的结构来存储的,子节点里存储的都是索引与指针,而数据则都存储在叶子节点中,那么由此可见,锁是基于索引来实现的,那么什么是锁呢,锁分别又有哪些种类?
什么是数据库锁?
锁是网络数据库中的一个非常重要的概念,当多个用户同时对数据库并发操作时,会带来数据不一致的问题,所以,锁主要用于多用户环境下保证数据库完整性和一致性。
锁都有哪些?
锁根据具体业务、概念、操作的不同也分有很多种,有的是锁的概念,有的是锁的具体体现,也有的是锁的用法,大概有乐观锁、悲观锁、行级锁、表级锁、记录锁、间隙锁、临建锁、共享锁、排他锁、意向共享锁、意向排他锁等等。。

乐观锁和悲观锁:
乐观锁:
总是认为不会产生并发问题,每次去取数据的时候总认为不会有其他线程对数据进行修改,因此不会上锁,但是在更新时会判断其他线程在这之前有没有对数据进行修改,一般会使用版本号机制或CAS操作实现。
version方式:一般是在数据表中加上一个数据版本号version字段,表示数据被修改的次数,当数据被修改时,version值会加一。当线程A要更新数据值时,在读取数据的同时也会读取version值,在提交更新时,若刚才读取到的version值为当前数据库中的version值相等时才更新,否则重试更新操作,直到更新成功。
核心SQL代码:

update table set x=x+1, version=version+1 where id=#{id} and version=#{version};

乐观锁机制避免了长事务中的数据库加锁开销,大大提升了大并发量下的系统整体性能表现。
例子:
通过版本号来控制,数据版本是1,我和小红同时对数据进行修改,在事务提交前,我和小红的程序内部获取的数据版本都是1,所以提交的时候,版本是2.修改后,我先提交,数据版本为2,小红提交时想把数据版本变成2,但是不好意思,只有数据版本只能是3.所以,小红的提交无效。

悲观锁:
总是假设最坏的情况,每次取数据时都认为其他线程会去修改,所以都会加锁(读锁、写锁、行锁等),当其他线程想要访问数据时,都需要阻塞挂起等待。可以依靠数据库实现,如行锁、读锁和写锁等,都是在操作之前加锁,在Java中,synchronized(同步锁)的思想也是悲观锁。

行级锁和表级锁:
表级锁:
表级别的锁定是MySQL各存储引擎中最大颗粒度的锁定机制。该锁定机制最大的特点是实现逻辑非常简单,带来的系统负面影响最小。所以获取锁和释放锁的速度很快。由于表级锁一次会将整个表锁定,所以可以很好的避免困扰我们的死锁问题。

行级锁:
行级锁定最大的特点就是锁定对象的颗粒度很小,也是目前各大数据库管理软件所实现的锁定颗粒度最小的。由于锁定颗粒度很小,所以发生锁定资源争用的概率也最小,能够给予应用程序尽可能大的并发处理能力而提高一些需要高并发应用系统的整体性能。

表级锁:开销小,加锁快;不会出现死锁;锁定粒度大,发生锁冲突的概率最高,并发度最低;
行级锁:开销大,加锁慢;会出现死锁;锁定粒度最小,发生锁冲突的概率最低,并发度也最高;

记录锁、间隙锁、临建锁:
这些锁的前提条件是要命中索引,属于行级锁
记录锁:
记录锁很好理解,一般要通过主键或唯一索引加锁,就可以较好的实现。记录锁就是为某行记录加锁,它封锁该行的索引记录:
– id 列为主键列或唯一索引列
SELECT * FROM table WHERE id = 1 FOR UPDATE;
id 为 1 的记录行会被锁住。id 列必须为唯一索引列或主键列,否则上述语句加的锁就会变成临键锁。同时查询语句必须为精准匹配(=),不能为 >、<、like等,否则也会退化成临键锁

间隙锁:
间隙锁基于非唯一索引,它锁定一段范围内的索引记录。间隙锁基于下面将会提到的Next-Key Locking 算法,请务必牢记:使用间隙锁锁住的是一个区间,而不仅仅是这个区间中的每一条数据。
SELECT * FROM table WHERE id BETWEN 1 AND 10 FOR UPDATE;
即所有在(1,10)区间内的记录行都会被锁住,所有id 为 2、3、4、5、6、7、8、9 的数据行的插入会被阻塞,但是 1 和 10 两条记录行并不会被锁住。

临建锁:
通过临建锁可以解决幻读的问题。 每个数据行上的非唯一索引列上都会存在一把临键锁,当某个事务持有该数据行的临键锁时,会锁住一段左开右闭区间的数据。需要强调的一点是,InnoDB 中行级锁是基于索引实现的,临键锁只与非唯一索引列有关,在唯一索引列(包括主键列)上不存在临键锁。

共享锁和排他锁:
共享锁也叫写锁,排他锁也叫读锁。
共享锁(写锁):
共享锁用于不更改或不更新数据的操作(只读操作),如 SELECT 语句。
也就是说如果事务1对数据A加上共享锁后,则其他事务只能对A再加共享锁,不能加排他锁。获准共享锁的事务只能读数据,不能修改数据。

排他锁(读锁):
用于数据修改操作,例如 INSERT、UPDATE 或 DELETE。确保不会同时同一资源进行多重更新。
如果事务1对数据A加上排他锁后,则其他事务不能再对A加任任何类型的封锁。获准排他锁的事务既能读数据,又能修改数据。
我们在操作数据库的时候,可能会由于并发问题而引起的数据的不一致性(数据冲突)。

还有很多锁就不一一介绍了,数据库锁的目的就是为了保证事务的隔离性,各个事务之间互不影响,但是在实际业务操作中,我们要根据锁的机制与事务的隔离性来编写代码,从而避免有长事务或死锁的产生。

震惊!用刚发布的GPT-5写研究现状,文献综述写作一整个大逆袭(附步骤+10条AI提示词) 每类分别给出:国内重点(3 条)、国外重点(3 条)、代表性方法(2–3 条)、代表成果(各 1–2 条)、主要问题(2 条)。每个场景给出:技术方案(2–3 种)、研究目标、实际成效/案例、当前挑战(3 点)。指令:基于国内外现状,系统列出当前学界的研究空白、关键未解问题与争议焦点(每项配简要证据/示例),并针对每个空白提出 1–2 条可行的研究方向或方法路径。三、差异与研究空白分析(≥300 字)。对每个小节提供:小标题、中心论点(1 句)、拟写要点(3–5 条)、建议引用类型(理论/方法/案例)。 阅读详情

相关推荐

手把手教你复现IEEE 2025高光谱图像盲超分算法DBSR(附开源代码与避坑指南)

本文详细介绍了如何从零复现IEEE 2025高光谱图像盲超分算法DBSR,包括环境配置、数据预处理、核心模块解析、训练策略及常见问题解决方案。特别针对开源代码中的关键步骤和潜在问题提供了实用指南,帮助研究者和开发者高效实现Deep blind super-resolution技术,适用于遥感、医疗等领域的图像增强应用。

weixin_42524708的博客 413

SQL SERVER 事务和锁

SQL SERVER 事务和锁 事务:保持逻辑数据一致性与可恢复性,必不可少的利器。 锁:多用户访问同一数据库资源时,对访问的先后次序权限管理的一种机制,没有他事务或许将会一塌糊涂,不能保证数据的安全正确读写。 先举一个典型的业务 A给B转账100元 在数据库中 实际进行了两步操作 A的账户减掉100元 B的账户增加100元 这两个动作应当构成一个不可分割的整体,要么完成其中的所有动作,...

marko_zheng的博客 1017

适合初学者的ROS机器人教程(1): Ubuntu下ROS创建自己的包和使用github下载的包

ROS如何创建自己的包 1. 首先创建catkin工作空间(如果你以及有了请忽略) $ mkdir catkin_ws # 创建一个文件夹里面计划放我们的项目,ws是workspace的缩写 $ cd catkin_ws # 将当前工作文件夹切换到catkin_ws这个文件夹 ~/catkin_ws$ catkin_make # 执行catkin_make创建一ROS项目 此时你的catkin_...

@司南牧|知乎|博客|易懂教程|李韬 3245

数据库事务与锁关系心得【mysql】

一、总结: 1、数据库事务隔离级别有read uncommit, read commit,reapeat read,串行。事务隔离级别考虑解决的问题:脏读,不可重复读,幻读。 2、锁有共享锁也称读锁、排他锁也称写锁。按加锁位置分,表锁、行锁、间隙锁、next-key锁。 3、事务隔离级别、与行数,影响数据加锁的类型。 4、start transation不会加锁。sql语句显式或隐式加锁。 5、事务提交或回滚辅助释放锁。单条sql也算隐式事务的话。 6、简单selec为快照读,select...

yulin_ganbo的博客 356

PyMiMi实战指南:midas_api配置与连接测试详解

本文详细介绍了PyMiMi库中midas_api的配置与连接测试全流程。从环境准备、API密钥获取,到核心的url_cfg配置函数使用,再到通过test_url进行连接验证,提供了清晰的步骤和代码示例。文章重点解析了配置原理、常见错误排查方法(如401错误、连接超时),并强调了API密钥的安全性管理,帮助用户稳固建立Python与Midas Civil NX之间的自动化通信桥梁。

weixin_29044713的博客 706

EBS开发_离散工单创建API

--以下代码于20171213在TONY环境中实现 DECLARE     l_iface_rec    wip.wip_job_schedule_interface%ROWTYPE; --工单任务接口表     l_group_id     NUMBER;     l_returnstatus VARCHAR2(40);     l_errormsg     VARCHAR2(2000

蜗牛先生快跑的博客 2596

数据库事务及锁总结

什么是事务? 事务是指是程序中一系列严密的逻辑操作,而且所有操作必须全部成功完成,否则在每个操作中所作的所有更改都会被撤消。是数据库操作的最小工作单元,是作为单个逻辑工作单元执行的一系列操作;这些操作作为一个整体一起向系统提交,要么都执行、要么都不执行;事务是一组不可再分割的操作集合(工作逻辑单元) 事务的四种特性(ACID) 1 、原子性(atomicity) 事务是数据库的操作的最小单元,不可分割。事务中包含的各操作要么都做,要么都不做 。 2 、一致性(consistency) 事务的执行使数据

99150的博客 393

Halcon —— 图像像素类型与转换

图像类型 就目前工业领域主流的图像处理工具halcon来讲,有以下几张图像类型:‘byte’, ‘complex’, ‘cyclic’, ‘direction’, ‘int1’, ‘int2’, ‘int4’, ‘int8’, ‘real’, ‘uint2’,具体含义如下图所示。相互间的转换可通过convert_image_type算子完成,但盲目转换会导致图像像素值异常。 ‘byte’ 每像素1字节,无符号 值范围: (0到255) ‘int1’ 每像素1字节,有符号 值范围: (-128到127) ‘

baidu_35536188的博客 1万+

一文搞懂什么是数据仓库(Data Warehouse)数据仓库与数据库区别有哪些?什么是元数据?

前期回顾: ⼤数据是如何产⽣的?大数据的特点是什么?什么是埋点?如何进行数据埋点?【超详细介绍】 对于这么多种类,这么大体量的数据是如何存储的呢? 所以数据仓库就应景而生了。 目录数据仓库(数据是如何存储的)1 什么是数据仓库?2 数据仓库解决什么问题?3 数据仓库的主要特征4 数据仓库与数据库区别5 数据仓库架构6 数据仓库元数据管理什么是元数据?元数据具体的工作内容元数据分为技术元数据和业务元数据7 数据治理脏数据的种类数据治理原则知识拓展(数据集市)结束语 数据仓库(数据是如何存储的) 1 什么是数据

w0714的博客 5万+

1.深入浅出:理解三极管截止、放大和饱和状态!——参考《模拟电子技术基础》清华大学华成英主讲

幼儿园水平理解三极管截止、放大和饱和状态!书上看不懂,听课听不懂的过来! 绕不开的三极管结构 以NPN为例,晶体三极管的结构,这是很多人不想看的,但是确实是非常重要的!不看结构是理解不了工作原理的! (这样记忆:N是negative,负,代表多子为电子;P是positive,正,代表多子为空穴) 注意观察三极管的结构,有助于理解工作时的状态。 两张图结合起来看,略作解释: 1.图中空心为空穴带正...

Hardware_harder的博客 4万+

手把手教你完成基于matlab的路面裂缝检测系统设计

裂缝是路面病害最早的形态之一,只有在裂缝出现的早期进行维护,才能有效地提高公路的使用寿命。因此,路面裂缝的检测识别系统对于提升公路质量有着重大的意义。首先,对路面裂缝图像进行相应的预处理,目的是减小环境因素的影响,消除无用的噪点。然后提取目标图像特征,判断路面裂缝类型,标记出路面裂缝的位置。最后通过设计的 GUI 界面来集成各个关键步骤,显示所得到的试验结果。仿真结果表明,设计的路面裂缝检测识别系统是高效可行的。

在职AI算法工程师,擅长计算机视觉,YOLO目标检测、分割等,擅长web、pyqt界面可视化,好内容持续更新中,来这里跟大家一起学习,共同进步 1216

事务与锁调优:死锁排查、锁粒度与并发控制实践

事务与锁机制是数据库并发控制的核心,同时也是高并发业务场景中最常见的性能瓶颈来源。死锁、锁等待、锁粒度设计不当常导致 QPS 下滑、请求超时甚至主库阻塞。本文基于 MySQL(InnoDB)与 PostgreSQL 等主流数据库的锁实现机制,系统讲解事务级别、锁类型、并发冲突场景的本质原理,并结合真实业务案例展开死锁诊断、锁粒度优化与锁等待监控的实战分享,为读者提供一套可复用、可演进的事务与锁优化方法论。

努力分享一些人工智能、计算机视觉、影像等相关的知识干货! 1170

Unreal从入门到精通之如何绘制用于VR的3DUI交互的手柄射线

之前我写过一篇文章《Unreal5从入门到精通之如何在VR中使用3DUI》,其中讲到使用WidgetComponent和3DUI进行交互。然而,这种方法存在一个问题:为了让射线可视化,我们需要勾选“调试/显示调试”,这样才能在手柄上看到代表其指向的一条红色射线。但最关键的问题是,这个显示调试信息的功能只属于Debug调试模式,也就是说,一旦将项目正式打包发布,这条射线辅助线就没有了。如下图所示:我就觉得Unreal官方真的是有点过分了,这不应该是最基本的功能么?难道我们VR要在Debug模式下发布?

TxNet 1612

SQLServer事务与锁

SQLServer事务与锁 最近在做一个项目,因为项目需求要设备信息跟数据库信息同步并且要保存数据的正确性,使用了SQLServer的两个功能:事务和锁。 功能前景:设备的信息要跟数据库同步,数据是关联多张表的,数据里面有代码(数据库自动生成) 数据库自动生成代码我们是利用获取最后一条数据的代码然后加1实现的,所以自动生成代码的功能是有缺陷的,假如项目前台同时执行一个SQL语句,那么这两条数据的代...

qq_43439125的博客 964

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

数据仓库之OLAP与OLTP区别

关于数据仓库 数据仓库的定义 一个面向主题,集成的,稳定,随时间变化的数据集合,以用于支持管理的决策过程。 数据仓库的目的 通过集成不同的系统信息为企业提供统一的决策分析平台,帮助企业解决实际的业务问题。 数据仓库的特征 ①面向主题 ②集成 ③稳定性即非易失得④随时间而变化即时变化的 如今,数据仓库已经成为商务智能由数据到知识,由知识转化为利润的基础和核心技术 数据库与数据仓库的区别实际讲的是OLTP与OLAP的区别 OLTP(联机事务处理) 操作型处理,叫联机事务处理OLTP(On-Line

伍曾雨阳的博客 8万+

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

Linq2db基于事务方式访问数据库

最近在写一个小软件OPC客户端,数据库用是的sqlite,之前都是自己写一个sqlhelper来访问数据库,后面听说用linq不用写sql语名,用起来很方便,听别人说linq2db是一款轻量型的linq,于是通过nuget安装了linq2db,安装好配置好数据库的映射就可以用了。 发现用linq写数据库操作还真的是方便,写代码时有提示,编译通过了就肯定不会有问题了,不过在用的时候遇到一...

weixin_45887608的博客 735

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

【数据库】数据库多种锁模式,共享锁、排它锁,更新锁,增量锁,死锁消除与性能优化

随着信息技术的飞速发展,数据已经渗透到各个领域,成为现代社会最重要的资产之一。在这个大数据时代,数据库理论在数据管理、存储和处理中发挥着至关重要的作用。然而,很多读者可能对数据库理论感到困惑,不知道如何选择合适的数据库,如何设计有效的数据库结构,以及如何处理和管理大量的数据。因此,本专栏旨在为读者提供一套全面、深入的数据库理论指南,帮助他们更好地理解和应用数据库技术。数据库理论是研究如何有效地管理、存储和检索数据的学科。

一个追逐梦想的码农 6237

ajax 数据库 事务,laravel使用DB插入数据:事务

我有简单的Laravel上传,插入/更新。laravel使用DB插入数据:事务我有AJAX是上传CSV文件到我的目录..$.ajax({url:'uploadExcel',data: new FormData($("#uploadForm")[0]),headers: {'X-CSRF-TOKEN' : $('meta[name="_token"]').attr('content')},// da...

weixin_29422697的博客 494

MySQL锁等待超时问题的排查与解决

MySQL锁等待超时问题的排查与解决

Leighteen 2531

数据库事务ACID原则学习分享

我们通过银行的APP软件可以实现转账功能,例如,张三通过手机端的银行APP软件将100块钱从自己的银行账户转到李四的银行账户,简单讲,在这个转账过程中经历了信息系统的三部分的活动,如下图所示: 由上图可以看到,张三通过操作的银行APP软件就是客户端(简称Clinet端),银行的机房里安装的服务器中运行了能够接收这些APP操作请求的服务系统(简称Server端),在这个事例中,张三就是在银行的APP...

通俗讲技术 3420

springboot实现数据库锁

前言 如何处理资源访问并发是老生常谈的问题 java中可以用mutex机制,可以用synchronized代码块,但是遇到分布式就GG了。分布式可以用分布式锁。但是,我真没非得上它的必要,我的需求还没到这复杂度。参考了一些分布式锁的原理,真要用的话,我也宁愿自己写一套,基于网络访问+统一的信号量管理,应该没问题的。我的境况决定了,我没有那么多功夫就研究轮子,只能追求小而美的东西, 最主要的是一定...

OHRadiance的专栏 6927

数据库事务与锁的知识点

数据库不同事务实现本质就是锁、mvcc

lotluck的专栏 485

详解MySQL事务与锁

事务:一组SQL语句,要么全部成功要么全部失败。 事务的特点(ACID): 原子性的保证:undolog,回滚日志 持久性:redo,日志,beinlog 原子性 MySQL日志:bin log、undo log、redo log、relay log、error log、慢日志。 持久性原理:Redo log undo log 需要落盘 redo log(要落盘): 如图, 0:MySQL挂了,会丢数据 1: 不会丢,最安全,效率比较低。 2:M...

57 382

关于数据库锁的分享

锁的介绍: 范围如下: 1.兼容性:共享锁与排它锁 共享锁和排它锁是innoDB实现的标准行级锁:也就是s锁和x锁。 排它锁(x锁):可以让持有锁的事务更新或者删除一行。 共享锁(s锁):可以让持有锁的事务读取一行。 举个例子: ...

cheng549309240的博客 389

mysql 5.1 innodb trx_MySQL 查看事务和锁情况的常用语句分享

一些查看数据库中事务和锁情况的常用语句查看事务等待状况:SELECTr.trx_id waiting_trx_id,r.trx_mysql_thread_id waiting_thread,r.trx_query waiting_query,b.trx_id blocking_trx_id,b.trx_mysql_thread_id blocking_thread,b.trx_query bloc...

weixin_34274954的博客 1068

数据库学习之旅:从零基础到性能优化的实战经验分享

在数据库的学习过程中,不仅仅要掌握基础知识,更要注重实践和探索。无论是数据库的性能优化、数据安全、还是大规模数据处理,都需要持续的学习和积累。希望通过本文的分享,你能够更好地理解数据库的各个方面,逐步成长为一名优秀的数据库开发者。

一键难忘的博客 3955
上一篇: 学习总结与分享-MySQL数据库索引底层原理入门浅析
下一篇: 学习总结与分享-MySQL的MVCC(多版本并发控制)浅析
VolcanoWec
博客等级 码龄8年 0粉丝 24原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值