数据库中事务基本原理和概念(单机)

单机数据库,集群数据库,分布式数据库的概念和比较 单机数据库: 简介: 只能运行在单机上,不能提供网络功能的数据库。实现数据采集、保存、管理功能,实现信息共享、避免交叉采集数据。优点: 1. 减少数据冗余,节省存储空间 方便数据查询和管理 实现数据资源共享 方便编写数据库相关应用程序 缺点: 1. 不能进行网络通信 串行处理数据请求 单机存在性能瓶颈 随着业务规模扩大和联机事务增加性能大幅下降 单机数据库的比较: 数据库 阅读详情

前置阅读

https://blog.youkuaiyun.com/define_us/article/details/79738918

事务

我们很熟悉,事务必须符合原子性,一致性,隔离性,持久性。简称ACID。其中隔离性最复杂,有四个隔离级别

  • 未提交读 事务中的修改,即使没有提交,也对其他事务可见
  • 提交读(不可重复读) 事务在执行过程中,可以看到其他事务提交的结果。也就是说,连续读取两次,读取的结果可能发生变化
  • 可重复读。解决了上述问题。但是还是有幻读的问题。这是因为只使用了行级锁(如果使用范围锁或者表锁就不会出现这个问题)。在两次查询统一范围内的数据时,会发现数据变多了。Innodb通过MVCC机制解决了幻读的问题。这个级别是Mysql的默认事务隔离级别
  • 串行化。没有任何并发问题。

数据库中的锁

按照作用分:

  • 共享锁 select语句会加入共享锁,数据库机制规定共享锁和排他锁不能同时添加到一个资源上。所以,一句select对资源加了共享锁,另一句select也可以对同一资源加共享锁,但是,一句update则必须等待,因为,他无法把排他锁加到一个已经上了共享锁的资源上。
  • 排他锁 其它任何资源,既不能读,也不能更改
  • 意向锁
  • 计划锁
  • 更新锁 为了解决共享锁和排他锁所带来的死锁问题。假设事物1对资源1加了共享锁,事物2对同一资源也加了共享锁。如果他们随后都想对该资源加入排他锁,就会陷入死锁。所以,事物1一开始应该对资源加入更新锁,表示我已经获取了取得该资源的排他锁资格,但是目前只对该资源加上了共享锁,你们可以读(加上共享锁),但是不要试图加上拍他锁。此时,事物2在试图对该资源加拍他锁后就会等待。

按照粒度分

  • 行级锁
  • 页级锁
  • 表级锁

锁机制

对应事务的隔离隔离界别,需要采用数据库的锁机制。

  • 1、一级封锁协议 (对应 read uncommited)   
    一级封锁协议是:事务在对需要修改的数据上面(就是在发生修改的瞬间) 对其加共享锁(防止其它事物同时更改,但是,此时另一个事物如果要读取,就会导致“脏读”),直到事务结束才释放。事务结束包括正常结束(COMMIT)和非正常结束(ROLLBACK)。一级封锁协议不能避免 丢失更新,脏读,不可重复读,幻读!

  • 2、二级封锁协议 (对应read commited) 
    二级封锁协议是:1)事务在对需要更新的数据 上(就是发生更新的瞬间) 加 排他锁 (直到事务结束) , 防止其他事务读取未提交的数据,这样,也就避免了 “脏读” 的情况。2)事务 对当前被读取的数据 上面加共享锁(当读到时加上共享锁),一旦读完该行,立即 释放该 该行的共享锁 - 从数据库的底层实现更深入的来理解,既是,数据库会对游标当前的数据上加共享锁 , 但是当游标离开当前行的时候,立即释放该行的共享锁。 
    二级封锁协议除防止了“脏读”数据,但是不能避免丢失更新,不可重复读,幻读 。

  • 3、三级封锁协议 (对应reapetable read)
    三级封锁协议是:二级封锁协议加上事务(在读取数据的瞬间)必须先对其加共享锁 , 但是直到事务结束才释放。这样保证了可重复读(既是其他的事务职能读取该数据,但是不能更新该数据)。但是,这样,不能避免幻读,也不能避免丢失更新。为了防止丢失更新,需要程序员手动对读取的数据并要在之后进行更新的数据加上排他锁。

  • 4、最强封锁协议(对应Serialization)
    四级封锁协议是对三级封锁协议的增强,其实现机制也最为简单,直接对 事务中所读取或者更改的数据所在的表加表锁,也就是说,其他事务不能 读写 该表中的任何数据。这样所有的 脏读,不可重复读,幻读 ,都得以避免!

redo undo日志在事务中的作用

如果让我自己用JAVA编一个事务数据库,我们可能会按照上述思路。但计算机科学家毕竟不能和程序员一个档次。在数据库的世界里,数据从来都不重要,日志才是最重要的,有了日志就有了一切。
REDO UNDO机制简单介绍如下。
https://blog.youkuaiyun.com/define_us/article/details/84139912
一个标准的事务执行流程如下

  • 写undo日志到log buffer;
  • 执行事务,并写redo日志到log buffer;
  • 如果innodb_flush_log_at_trx_commit=1,则将redo日志写到log file,并刷新落盘。(提交事务。)

MVCC机制

上面只是解释了ACID的持久性和原子性的实现。另一方面,我们还需要隔离性和一致性。
多版本并发控制。简单而讲,同一份数据临时保留多版本的方式,实际上也就是行锁的一种变种。这种做法牺牲的是存储空间,为每一行额外保存一个版本列。MVCC只适用于repeatable read和read commit两个隔离级别。
每一个数据行都有自己的一个版本标志。数据库保证每个事务的ID都是递增的。每一个数据行的版本标志就是修改它的事务ID。同一时刻内一行数据会有多个版本。
MVCC 数据库需要更一个一条数据记录的时候,它不会直接用新数据覆盖旧数据,而是将旧数据标记为过时(obsolete)并在别处增加新版本的数据。这样就会有存储多个版本的数据,但是只有一个是最新的。这种方式允许读者读取在他读之前已经存在的数据。

  • read uncommited 读数据时永远读最新版本的数据

  • read commited 所有事务公用一个read-view,每次commit后都会为当前正在进行的事务更新该read-view

  • reapetable 所有事务都持有一个read-view,read 每次commit时不会为当前正在进行的事务更新read-view。相应的增加了很大的维护成本。设想一下,如果你有一个程序在执行一个长长的事务试图生成一个报表。那么这个事务执行期间,所有涉及行的版本都必须被存储。如果还有一部分行是热点行被频繁修改,那么数据库甚至可能被迫存储同一行数据的上千个版本。

  • Serialization 对事务的所有行直接加锁。

MVCC的核心优点在于读不加锁,读写不冲突。

《C#零基础入门之百识百例》(七)算数运算符 -- 圆的面积 运算符是一种告诉编译器执行特定的数学或逻辑操作的符号。C# 有丰富的内置运算符,本文带你学习C# 中算数运算符。 阅读详情

相关推荐

电工识图入门:从电气符号到控制逻辑的完整指南

电工图纸是电气工程领域的通用语言,无论是设备安装、线路检修还是系统设计,看不懂图纸就像航海没有海图。很多初学者面对复杂的电气符号和线路走向感到无从下手,实际上只要掌握正确的识图方法,就能从简单的照明电路逐步过渡到复杂的自动化控制系统。 本文将从最基础的电气符号和图纸类型讲起,通过实际图纸案例解析,带你建立完整的识图逻辑。你将学会如何区分主回路和控制回路,如何追踪电流路径,以及如何结合图纸进行故障排查。无论你是电工新手、设备维护人员还是相关专业学生,这套方法都能帮你快速提升图纸理解能力。 1. 电气图纸基础:

chengyixian7877的博客 337

分布式数据库难题(四):单机事务

首先,设想这样一个例子:你正在开发一个应用程序来帮助医生管理医院的轮班。通常,医院会安排多个医生值班,医生也可以申请调整班次,但是前提是确保至少一位医生还在该班次中值班。现在的情况是,Alic和Bob是两位值班医生,两人碰巧都身体不适,因而都决定请假,不幸的是,他们几乎同一时刻点击了调班按钮,如下图所示:每笔事务总是首先检查是否至少有两名医生目前在值班。如果是的话,则有一名医生可以安全离开。由于数据库正在使用快照隔离级别,两个检查都返回有两名医生,所以两个事务都安全地进入到下一阶段。

蓬莱道人的博客 1067

Diffix3D+复现

上下载模型,将其放在一个目录中,并将目录名填在demo代码中from_pretrained的cache_dir参数里。目录结构应该是"<PATH>/nvidia/difix/…给的requirements文件中pytorch和xformers的版本没有指定,这里测试过以下版本,可以成功运行。将readme中的demo代码新建一个python脚本复制进去,然后将脚本放在src目录中运行。如果遇到网络问题无法加载huggingface上的预训练模型,可以手动从。如果出现,以下错误重新。

NeverMakeIt的博客 1085

单机事务的理解

事务的四大特性 ACID 原子性要求,事务是一个不可分割的执行单元,事务中的所有操作要么全都执行,要么全都不执行。 一致性要求,事务在开始前和结束后,数据库的完整性约束没有被破坏。 隔离性要求,事务的执行是相互独立的,它们不会相互干扰,一个事务不会看到另一个正在运行过程中的事务的数据。 持久性要求,一个事务完成之后,事务的执行结果必须是持久化保存的。即使数据库发生崩溃,在数据库恢复后事务提交的结果仍然不会丢失。 事务的隔离级别: 更新丢失:也属于第二类数据的更新丢失,第二类丢失更新 A事务覆盖B事务已经提

weixin_41500775的博客 368

【DaVinci Developer实战指南】从入门到精通:软件组件设计与配置全解析

本文详细解析了DaVinci Developer在汽车电子开发中的核心应用,从软件组件设计到配置实战,涵盖Application SWC创建、RunnableEntity设计及Exclusive Area配置等关键环节。通过实际案例分享,帮助开发者快速掌握AUTOSAR架构下的ECU软件开发技巧,提升工作效率与系统稳定性。

weixin_30952535的博客 248

银河麒麟V10系统下VLC播放器安装全攻略(附3.0.9.2版本离线包下载)

本文详细介绍了在银河麒麟V10操作系统无网络环境下,从零开始编译安装VLC 3.0.9.2播放器的完整攻略。通过构建本地YUM仓库解决依赖问题,提供离线资源包下载,并逐步指导完成编译环境配置、软件编译与安装,帮助用户在国产麒麟系统上成功部署强大的多媒体播放能力。

a2b3c4d5e的博客 1190

数据库之 深入理解 单机事务

ACID的传统解释,我去百度一个,贴在这里放在:   ACID是事务的四大特性,想要成为事务,必须具备这四点。 Atomicity 原子性体现在对于一个事务来讲,要么一起执行成功要么一起失败,执行的过程中是不能被打断或者执行其他操作的。 Consistency 一致性表现为事务进行过后和执行前,整体系统都是稳定的,比如对于入账出账操作是不会有总资金的变化的。 Isolation 隔离性表...

长河的博客 512

企业级AI项目落地实战指南

企业级 AI 项目落地需构建“分阶段实施 + 多维度风控”的双轮驱动体系:实施端通过 POC 验证技术可行性、试点建立评估标准、规模化实现价值复制,各阶段需结合行业案例(如东阳光药、旺盈集团)提炼可复用经验;风险端则需覆盖技术(数据安全、模型稳定性)、合规(全球监管动态)、组织(人才与文化)维度,通过工具化框架(AI TRISM)与案例策略(邮储银行可解释性设计、拓斯达培训体系)实现风险可控。最终通过“场景聚焦 - 合规嵌入 - 持续优化”的循环机制,实现 AI 技术从“试点成功”到“全面价值创造”的跨越。

2509_93209761的博客 1437

(4) 数据库之 深入理解 单机事务

ACID 1、原子性 一个事务(transaction)中的所有操作,要么全部完成,要么全部不完成,不会结束在中间某个环节。事务在执行过程中发生错误,会被回滚(Rollback)到事务开始前的状态,就像这个事务从来没有执行过一样。 举例说明: bob 给smith转账100元,事务分解为三个操作,分别对应v1,v2和v3。  两个状态 事务的初始状态对应v1.    事物的最

pandaj的专栏 1249

STM32F407VET6与CH395Q串口通信实战:从零搭建以太网客户端(附完整代码)

本文详细介绍了基于STM32F407VET6微控制器与南京沁恒微CH395Q以太网芯片,通过串口通信从零搭建TCP客户端应用的完整实战过程。内容涵盖硬件连接、驱动层设计、基于FreeRTOS的任务实现以及核心调试技巧,并提供了完整的代码示例,帮助嵌入式开发者快速实现设备联网功能。

weixin_29179311的博客 413

YOLOv11改进策略【注意力机制篇】| SE、CBAM、ECA、CA、Swin Transformer等注意力机制全面解析与应用

本文详细介绍了五种主流的注意力机制及其在YOLOv11中的应用。通过合理的模块选择和位置部署,注意力机制能够显著提升目标检测性能。

QQ_778132974的博客 873

单机事务

事务简介 事物的本质 => 锁和并发的结合体 优势:容易理解 劣势:性能一般 容易理解的模型性能不好,性能好的模型都不容易理解。 ACID保证事务完整性 bob给smith转1000元钱,要么钱在bob这,要么在smith这,不会让其他线程看到bob和smith的钱都为0的情况。 事务 - 单个事务单元 建立一个基于GMT_Modified的索引 读一行记录 写一行记录,同...

QinDaBao_的博客 553

2025年09月中国电子学会青少年软件编程(Python)等级考试试卷(三级)答案 + 解析

2025年09月中国电子学会青少年软件编程(Python)等级考试试卷(三级)答案 + 解析

伶俐角少儿编程 515

数据库事务的概念及其实现原理

目录 1. 认识事务 1.1 为什么需要数据库事务 1.2 什么是数据库事务 1.3 事务如何解决问题 1.4 事务的ACID特性以及实现原理概述 2.并发异常与并发控制技术 2.1 常见的并发异常 2.2 事务的隔离级别 2.3 事务隔离性的实现——常见的并发控制技术 2.3.1 基于封锁的并发控制 2.3.2 基于时间戳的并发控制 2.3.3 基于有效性检查的并发控制 2.3.4 基于快照隔离的并发控制 2.3.5 关于并发控制技术的总结

小强快跑~~ 6908

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

ssm框架搭建

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

单机事务与分布式事务

事务 数据库事务指的是一组数据操作,事务内的操作要么就是全部成功,要么就是全部失败。 例如在转账的流程下,张三给李四转账 2000,第一步在账单账户下扣除 2000,第二步在李四账户下增加 2000,这两步可以视为一个事务。如果两步都成功则转账成功,如果其中任意一步失败,则撤回转账操作 四个特征(ACID) 事务具有四个特征:原子性( Atomicity )、一致性( Consistency )、隔离性( Isolation )和持续性( Durability )。这四个特性简称为 ACID 特性。 .

lingdian23的专栏 1335

efm32 入门.pdf

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

好用的单机数据库有哪些推荐?

问题背景:要求:(1)要比较好的支持XP和 win7(2)具有一些基本的数据库功能,比如外键,视图等(3)易于安装,维护起来也简单的在 Windows XP 和 Windows 7 环境下,选择一款适合的单机数据库,需要兼顾系统兼容性、功能完善性以及易用性。以下是几款符合要求的数据库推荐,每款数据库的特点和适用场景也有所不同。根据你的需求(支持 XP 和 Win7、功能齐全、易于安装维护),以下是具体推荐:如果你对数据库的资源占用敏感(如运行在老旧硬件上),建议选择 SQLite 或 Firebird;如果

小宝哥Code的专栏 3943

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

数据库事务复制单机双实例实现

数据库事务复制单机双实例的实现

yiersansisan的博客 1118

剖析单机事务原理

本文为转载文章 作者:CHEN川 链接:https://www.jianshu.com/p/2af078f4cc5d 江湖传说:不了解数据库事务的程序员不是一个好的DBA。阅遍网上无数关于数据库事务的文章,都感觉云里雾里,不知所云。于是乎拍案而起,麻蛋,还是自己写吧。最后便有了这篇文章,它试图用通俗的文字来说明单机事务的ACID特性及其大致的实现原理。 一、什么是事务? 数据库事务(简...

ANGEL CITY 2453

数据仓库原理

数据仓库原理 ODS>DWD>DWS>ADS

weixin_45875358的博客 5515

mongodb单机开启事务

mongodb单机开启事务。

qq_42771875的博客 929

单机、集群和分布式相关概念理解

单机、集群和分布式相关概念理解 单机 一个系统业务量很小的时候所有的代码都放在一个项目中就好了,然后把这个项目部署在一台服务器上就可以了。整个项目的所有服务都由这台服务器提供。这就是单机结构。但是单机结构的缺点非常明显,当业务量增加到一定程度的时候,单机的硬件资源无法满足业务要求(单机容量问题),此时出现了集群模式。 集群 单机处理达到瓶颈的时候,将单机复制几份,这样就构成了一个集群。集群中每台服务器就叫做这个集群的一个节点,所有节点构成一个集群。每个节点都提供相同的服务,这样系统的处理能力就相当于提升了好

qq_43223115的博客 574

《从单机事务到分布式事务》分享文档

昨晚跟朋友(马儿)撸串的时候又聊起了分布式事务,这里炒一个冷饭,发一下去年在部门内部分享的《从单机事务到分布式事务》文档。 单机事务 事务的特性 Atomicity(原子性) Isolation(隔离性) Durability(持久性) Consistency(一致性) MySQL InnoDB 事务实现原理 MVCC+锁+log MVCC(无锁) 隐藏列 版本链 锁 独占锁、共享锁 IX,IS 范围锁 行锁 间隙锁、临键锁、记录锁 表锁 log undo log .

【欢迎关注公众号:冬瓜白】 1379

海山数据库(He3DB)数据仓库发展历史与架构演进:(一)传统数仓

数据仓库的演进变革的因素有很多,例如快速的业务模式与群体规模的数据量带来的大数据处理技术、互联网的发展带来的数据源及数据类型的增多、人工智能的发展带来数智的融合、云计算交付模式的出现需要的细粒度的资源管理与隔离等,业务实时性的要求等都会带来数据仓库架构的变化。随着业务的发展,单机数据仓库的数据存储和计算模式不能满足大量数据处理的需求,在这个背景下基于MPP架构的数据仓库成为主流的解决方案,这阶段的数仓产品以在2000年代后出现的Teradata、Greenplum、Vertica等为代表。

weixin_42744640的博客 1556

分布式数据库事务故障恢复的原理与实践

关系数据库领域虽然历史悠久,但是仍然充满了活力。这些年来,随着硬件的发展,新的技术和思路也不断的涌现出来,从本文描述的单机数据库到分布式数据库中事务故障恢复的的方案,相信大家也都能感受到这些年来数据库技术的发展是如何一步步适应着硬件的发展趋势。未来又会怎样?更大的内存、更快速的网络、更廉价的硬盘、甚至是非易失性内存的普及,这些变化会给数据库技术带来怎样的可能性?让我们一起拭目以待。(迫不及待的同学,欢迎加入 OceanBase 团队,一起创造数据库技术的未来!

越吃越胖的博客 1777

单机数据库事务实现机制

注:本文章引自。

数据源的港湾 618

每个Java工程师,都应该掌握数据库事务(概念及原理)

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_33835690的博客 176
上一篇: Kafka的Exactly Once和事务
下一篇: Spark-Streaming基础
define_us
博客等级 码龄14年 157粉丝 531原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值