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

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加任任何类型的封锁。获准排他锁的事务既能读数据,又能修改数据。
我们在操作数据库的时候,可能会由于并发问题而引起的数据的不一致性(数据冲突)。

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

从零构建企业级多智能体系统:LangGraph 全流程实战 + 部署指南(含代码与架构图) > 在大模型应用爆发的今天,如何构建一个可协作、可调试、可部署的多智能体系统?LangGraph 正在成为工程师的新宠。本文从原理剖析、流程建模、代码实战到前后端部署,手把手带你用 LangGraph 构建一个企业级 AI 助理系统,整合财务分析、法务审阅、报告生成与图表可视化等 Agent 模块,全面打通从用户输入到报告输出的全链路闭环。适合有工程思维的 AI 架构师、Agent 研发人员、以及大模型项目实践者。 阅读详情

相关推荐

使用openMVS对样例数据进行重建

openMVS根据github上的步骤进行编译。注意,如果没有GPU,用不了CUDA的话,那么需要在openMVS目录下找到CmakeLists.txt文件,把CUDA设置为OFF: SET(OpenMVS_USE_CUDA OFF CACHE BOOL "Enable CUDA library") 可执行的文件生成在openMVS_build/bin/里面,在openMVS_build文件夹下打开终端,按照顺序执行如下命令即可逐步重建。其中,-w 设置的是数据的总路径,-i 后接输入的文件名,-o

YuhsiHu的博客 2888

SQL SERVER 事务和锁

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

marko_zheng的博客 1017

【零基础入门哈希签名架构,从Lamport到SPHINCS+】第二集 哈希签名树 Merkle Tree Authentication

在第一集中,我们一直忽略了一个问题。设想一下,假如有一个Hacker(黑客),在截获到Sender发送给Receiver的公钥之后,把这个公钥改成Hacker自己的公钥,然后再发给Receiver,那么Receiver就会误认为这是Sender的公钥。所以我们之前所说放方案,其安全性都需要建立在一个前提下:Receiver需要确认公钥确实是Sender发出的。

m0_50572808的博客 2454

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

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

yulin_ganbo的博客 356

由ip地址和子网掩码求网络号、主机号、广播地址(超详细)

1、用二进制数表示IP地址   在进行计算之前,我们首先要学会十进制的IP地址怎么转换为二进制的IP地址。   给出一个例子: 十进制:172.16.25.3 二进制:10101100.00010000.00011001.00000011 1、如果两台主机的网络号相同,我们就说它们是同一网段 2、主机号的意义 - 1)主机号部分全变成1,即为该网段的广播地址 - 2)主机号部分全变成0,即为该网段的网路地址(网络号) 3、如果主机号部分为x位,则该网络能容纳最大主机数为: 2的x次方-2。减2

爱吃雪糕的小布丁的博客 9万+

OpenCV实现文档扫描OCR识别(基于Python + OpenCV,含完整代码)

在当今数字化时代,文档处理的自动化需求日益增长。文档扫描OCR(Optical Character Recognition,光学字符识别)技术成为了将纸质文档转换为可编辑电子文本的关键手段。通过Python与OpenCV库的结合,我们能够实现高效、准确的文档扫描OCR识别。这一技术在办公自动化、数字图书馆、档案管理等众多领域都有着广泛的应用。

专注于人工智能、软件开发、工控自动化、工厂数字化及智能化等领域,希望和大家共同进步! 2031

数据库事务及锁总结

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

99150的博客 393

整车的智能配电系统

本文探讨了汽车电网安全的重要性,分析了传统汽车电网的现状,并重点介绍了半导体在汽车智能配电系统中的作用。半导体凭借其单向导电性和可控性,如二极管、MOSFET等,提供了更高效、安全的电力控制。通过对比传统保险丝与半导体器件,阐述了半导体在过流保护、电压监测和故障诊断方面的优势,强调其在减少安全隐患、提高能源管理和续航里程方面的贡献。极氪智能配电系统展示了如何运用半导体技术实现整车能源的精细化管理,降低维修成本,减少线束复杂性,提升安全性能。

让你爱上电路设计 1612

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

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

w0714的博客 5万+

【Flutter 面试题】 怎么减少Widget的重新构建?

关于 const 关键字的使用:在 Flutter 开发中,任何时候当你确定一个 Widget 在其整个生命周期内都不会发生变化时,使用 const 关键字声明这个 Widget。这样的声明告诉 Flutter 框架这个 Widget 可以在编译时生成,后续的构建周期中可以重用已经创建的 Widget,从而避免了重复的构建开销。这适用于静态文本、图标或整个不变的 Widget 树。

Code Metaverse 1577

【49】软考软件设计师——冲刺复盘:高频易错点与应试策略|复盘清单+应试技巧

本文是《软件设计师·50讲通关|从零基础到工程师职称》专栏第49篇,属于**模块六:冲刺与模拟**终篇,聚焦考前最后阶段的“精准复盘+应试提分”。全文围绕“高频易错点清零、答题时间优化、应急处理落地”三大核心,梳理9大知识领域的典型易错点(附避坑技巧)、优化版答题时间分配(含取舍策略)、考中全场景应急方案,配套可直接使用的“复盘清单”和“应试技巧手册”,帮助考生在最后阶段查漏补缺、固化得分逻辑,避免因低级错误丢分,以“稳、准、快”的状态应对考试。下一篇第50篇(终章)将进行全专栏知识体系回顾、考试策略总结

专注于人工智能、软件开发、工控自动化、工厂数字化及智能化等领域,希望和大家共同进步! 440

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

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

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

Dify平台隐患url:/console/api/remote-files/upload暴露高危漏洞,配置nginx htpasswd模块认证机制屏蔽解决

内部网络探测: 攻击者可通过SSRF扫描内网服务云元数据访问: 可能访问AWS/Aliyun/腾讯云等元数据服务服务端请求伪造: 以服务器身份发起任意HTTP请求。

CN_Eden 1321

SQLServer事务与锁

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

qq_43439125的博客 964

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

数据仓库之OLAP与OLTP区别

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

伍曾雨阳的博客 8万+

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

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

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

weixin_45887608的博客 735

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

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

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

一个追逐梦想的码农 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、付费专栏及课程。

余额充值