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

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

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

【stata基础代码大全 】 可独立完成一篇实证 用stata打开,直接替换自己需要的变量就行,小白友好❗️❗️❗️。八、八.中介效应检验:路径分析(三种方法)第二种方法即Sobel-Goodman检验。*(7)Winsor处理,剔除异常值。六、内生性问题解决方法(附具体模型)其三,工具变量:两阶段最小二乘。第三种方法即Bootstrap检验。二、Stata中数据的基本处理。*(5)生成行业、年度虚拟变量。PSM1————近邻匹配。七、调节效应检验:机制分析。*(2)剔除数据中的样本。*(4)给变量添加标签。*(3)生成新的变量。*(6)基本数据匹配。 阅读详情

相关推荐

时间卷积网络(TCN):结构+pytorch代码

文章目录TCNTCN结构1-D FCN的结构因果卷积(Causal Convolutions)膨胀因果卷积(Dilated Causal Convolutions)膨胀非因果卷积(Dilated Non-Causal Convolutions)残差块结构pytorch代码讲解 TCN   TCN(Temporal Convolutional Network)是由Shaojie Bai et al....

Leon_winter的博客 11万+

SQL SERVER 事务和锁

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

marko_zheng的博客 1017

HDRP shader 获取阴影(Custom Pass)

Unity:2021.3.0f1 HDRP:12.1.6

LanQ的博客 2099

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

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

yulin_ganbo的博客 356

Neo4j桌面版导入CVS文件

我们的relation.csv是这样的。

m0_53573725的博客 818

数学建模入门——数据预处理(全)

介绍了数据预处理的入门知识

n04j04h06的博客 4347

数据库事务及锁总结

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

99150的博客 393

windows10家庭版输入loadrunner注册码时报“License security violation. Operation isnot allowed”的解决办法

有可能出现2个错误第一个可能是第二个可能是“License security violation. Operation isnot allowed”ok,在此我在百度找了很多方法,大部分的方法都是删除注册表,但我根本就找不到这个注册表,而后又是管理中心找本地用户和组,但我依旧找不到这个玩意,然后可能是windows10家庭版本来就没有这个。再然后又以管理员身份去运行填写,好的,依旧报错,依旧未解决...

qq_30990097的博客 2560

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

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

w0714的博客 5万+

TIA博途中S7-1200进行MODBUS TCP通信(作为服务器)的具体方法演示

TIA博途中S7-1200进行MODBUS TCP通信(作为服务器)的具体方法演示

Robot_PLC_HMI_Automation 8616

微信小程序 - 最新图片组拖拽排序更换位置功能,类似微信朋友圈九宫格图片的拖动排序效果,微信小程序实现九宫格图片拖拽调换位置,小程序详细实现图像拖曳拖动切换位置排序功能(详细示例代码,一键复制开箱即用

微信小程序,wechat,小程序,图片排序,图像排序,九宫格拖拽排序,拖曳,拖动,拖拽,仿微信朋友圈,朋友圈宫格图片排序,微信朋友圈图片拖动排序效果,实现九宫格图片拖拽,图像拖拽排序组件插件,小程序实现拖拽图片切换图片位置,图片拖动互换位置,图像拖拽切换位置,九宫格图片组合拖动排序,交换九宫格图片的位置,小程序上传图片后,如何实现拖拽排序功能,小程序怎么实现图片拖拽排序,微信小程序图片上传,九宫格拖拽组件,选择图片并拖动_微信小程序图片拖拽,微信小程序长按拖拽排序,图像的拖拽移动,多图拖拽排序功能,实现九宫

✅ 精选推荐文章 4455

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

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

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

2023 ICRA《Visual Language Maps for Robot Navigation》阅读笔记

视觉语言导航可以使用预先训练的现有的视觉语言模型来将图像与对象目标的自然语言描述相匹配,但它与绘制环境的过程仍然脱节,缺乏经典几何地图的空间精度。为了解决这个问题,我们提出了VLMaps,这是一种空间地图表示,它将预训练的视觉语言特征与物理世界的3D重建直接融合在一起。VLMaps可以使用标准探索方法从机器人上的视频馈送中自主构建,并在没有额外标记数据的情况下实现地图的自然语言索引。具体来说,当与大型语言模型(LLM)相结合时,VLMaps可以用于。

qq_44100524的博客 1991

SQLServer事务与锁

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

qq_43439125的博客 964

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

数据仓库之OLAP与OLTP区别

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

伍曾雨阳的博客 8万+

ssm框架搭建

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

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

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

weixin_45887608的博客 735

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

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

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

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

余额充值