从谚语:“一手交钱,一手交货来”谈谈什么是数据库事务

事务与交易

一手交钱,一手交货

一手交钱,一手交货,谚语,意思是指钱和货当场相交,互不拖欠。出自明朝施耐庵《水浒传》第二一回。

Transaction 意思

我们先来看一下来自于剑桥英-英词典的解释:

transaction
noun [ C or U ]
UK /trænˈzæk.ʃən/ US /trænˈzæk.ʃən/

an occasion when someone buys or sells something, or when money is exchanged or the activity of buying or selling something

剑桥英语
当某人购买或销售物品,或者进行货币交换,或者进行购买或销售活动时发生的场合。

交易背后的逻辑

  • 涉及不同的利益体
    • 买、卖双方
  • 涉及多个动作
    • 买家付钱
    • 卖家给货
  • 涉及物品状态的变化
    • 买家的钱付出去了,得到了货物
    • 卖家的货给出去了,得到了金钱
  • 有据可查
    • 卖家应该开发票或交易凭证给买家,卖家留存根。
    • 也可以理解为买卖合同,一式两份,甚至是一式三份。

什么是事务

实际上上面所举的例子,就是一种社会规则,如果没有这个规则社会就会乱套。因为现如今的生活已经完全被数字化了,我们所有的行为都能反映到数字世界,数字世界的行为也需要遵循社会规则,不能乱套。

数据库事务就是这样一种机制,避免行为所产生的结果出现混乱,也就我们所说的要保证数据的完整性和一致性。

事务的定义

数据库事务是指一组数据库操作,这些操作被视为一个单独的工作单元,要么全部成功执行,要么全部失败回滚。事务通常用于确保数据库的一致性和完整性,以及支持数据的可靠处理。

事务的特性

为了达成这个目录,数据库事务就需要具备以下四种特性,也就是通常我们提到的ACID:

  • A - Atomicity
    原子性,事务是原子的,要么全部执行,要么全部不执行(回滚)。
  • C - Consistency
    一致性,事务执行的结果必须是使数据库从一个一致的状态转移到另一个一致的状态。
  • I - Isolation
    隔离性,事务的执行应该被隔离开来,即使有多个事务同时执行,它们也不会相互干扰。
  • D - Durability
    持久性,一旦事务成功完成,其结果应该是永久性的,即使系统发生故障,也应该能够保证数据的持久性。

A - Atomicity 原子性
作为买家,我们去买东西,我们给钱了,就必然要拿到货。
同理,作为卖家,他把商品给我们了,他就一定要收到钱。

这两个动作必须都发生,这笔交易才算达成。我给了钱,你不给货,那我就得把钱要回来,你给了货,我不给钱,你也得把货要回来,这就是回滚。

C - Consistency 一致性
还是拿买东西这个场景来说,比如说,我们去便利店买饮料,我们使用微信支付,我们拿了饮料后,需要将饮料给收银单服务员先扫码,这个过程是减库存,然后我们再微信支付。

这里涉及两个关键动作:减库存,和支付
减库存
一次交易,库存由原来的50瓶,减少1瓶,交易完成后剩余49瓶。
支付
我们的微信钱包,从10块钱,减少3.5元,交易完成后剩余6.5元。
这就叫从一个一致的状态转移到另一个一致的状态。

为什么要这样?道理很简单:东西不可能永远卖不完,钱也不可能永远花不完。行为导致结果,有行为,就会有结果。

I - Isolation 隔离性
指的是如果有多个行为同时发生的情况下,他们应该是互不干扰,也不会导致不一致的情况发生。

比如:80年代,商场推出了彩色电视机,在那个年代是紧俏的存在,大家都想买。商场有10个售货员同时在卖彩电,总共就100台,每卖出一台,商场都会实时在公告牌上更新剩余彩电的数量。

首先我们要保证剩余数量是准确的,我们还要保证只卖出去100台,如果有顾客付了钱,没买到彩电的,还得把钱退回去。

D - Durability 持久性
所谓持久性,就是指事务一旦成功,结果就会永远保存下来,也就是所有的交易要有交易凭证。交易凭证就是一种契约,是用来保护交易双方的合法权益的。

MySQL是怎么实现事务的

简单来讲主要就是通过日志、锁、多版本控制来保证事务的四大特性。

日志:redo log, undo log
锁:行锁,表锁,间隙锁,临键锁
多版本并发控制(Multi-Version Concurrent Control)

这些内容我们会在后面的文章中一个一个探讨。今天只是作个简单的介绍。

大家可以脑补一下,事务实现的关键在于什么?

  1. 所有的操作都有记录(log),出的问题可以根据记录回退。
  2. 我们在修改数据的时候,需要得到一把锁,这把锁就是权限,只允许拥有权限的人才能修改数据。

后续

希望今天这篇文章可以帮助到大家理解数据库事务的基本概念,我们将在后续文章中继续带大家探索以下几个方面的内容:

  • 数据库事务隔离级别
  • MVCC机制

关注我的公众号

欢迎大家关注、点赞、转发,一起交流软件开发、架构设计、云原生技术。
TXZQ聊IT技术与架构

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/833966.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

matlab中interp2函数应用

interp2 函数在 MATLAB 中用于进行二维插值。当使用 nearest 选项时,它会执行最近邻插值,即对于给定的目标点,函数将选择网格中距离其最近的点的值作为该目标点的插值结果。 以下是 interp2 函数在 nearest 模式下的用法示例,以及…

Flask-HTTP请求、响应、上下文、进阶实验

本节主要目录如下: 一、请求响应循环 二、HTTP请求 2.1、请求报文 2.2、Request对象 2.3、在Flask中处理请求 2.4、请求钩子 三、HTTP响应 3.1、响应报文 3.2、在Flask中生成响应 3.3、响应格式 3.4、Cookie 3.5、session:安全的Cookie 四、…

企业车辆管理系统参考论文(论文 + 源码)

【免费】关于企业车辆管理系统.zip资源-CSDN文库https://download.csdn.net/download/JW_559/89282550 企业车辆管理系统 摘 要 随着经济的日益增长,车辆作为最重要的交通工具,在企事业单位中得以普及,单位的车辆数目已经远远不止简单的几辆,与此同时就产生了车辆资源的合理…

Codeforces Round 940 (Div. 2) and CodeCraft-23 D. A BIT of an Inequality

A BIT of an Inequality 题目描述 给你一个数组 a 1 , a 2 , … , a n a_1, a_2, \ldots, a_n a1​,a2​,…,an​ 。求这样的图元( x , y , z x, y, z x,y,z )的个数: 1 ≤ x ≤ y ≤ z ≤ n 1 \leq x \leq y \leq z \leq n 1≤x≤y≤z≤…

汽车灯罩一般都是用什么材质做的?汽车车灯的灯罩如果破损破裂破洞了要怎么修复?

汽车灯罩一般都是用什么材质做的? 汽车灯罩一般使用的主要材质是聚碳酸酯(PC)和丙烯酸酯(PMMA)这两种塑料。这两种材料具有良好的透明性、耐候性和耐冲击性,因此非常适合用于汽车灯罩的制造。 聚碳酸酯&am…

小程序支付的款项流转与到账时间

商家做小程序,最关心的是客户通过小程序下单支付的钱,是怎么样的流转状态以及最终到哪里。因此,本文将详细解析款项最终流向何处以及多久能够到账。 一、小程序支付的款项流向 当用户在小程序内完成支付后,款项并不会直接到达商…

5月8日学习记录

_[FBCTF2019]RCEService(preg_match函数的绕过) 涉及知识点:preg_match函数绕过,json的格式,正则回溯 打开环境,要求用json的格式输入 搜索学习一下json的语法规则 数组(Array)用方括…

Map-Reduce是个什么东东?

MapReduce是一种用于使用并行分布式算法在集群计算机上处理大型数据集的编程模型及其相关实现。这一概念首先由Google普及,并随后作为Apache Hadoop项目的一部分开源发布。 MapReduce的基本工作流程: 映射(Mapping):这是第一阶段&#xff0c…

制造版图大变革!逾10座晶圆厂蓄势待发 | 百能云芯

在全球半导体产业的激烈竞争和市场需求的复杂波动中,晶圆厂建设热潮正在美国兴起,这一波建设浪潮的核心动力之一,便是美国政府推出的《芯片与科学法案》所承诺的巨额补贴,旨在提升美国在全球半导体行业的竞争力。 当地时间4月25日…

嵌入式—模块代码(一)

🎬 秋野酱:《个人主页》 🔥 个人专栏:《Java专栏》《Python专栏》 ⛺️心若有所向往,何惧道阻且长 文章目录 程序结构GPIO操作UART操作接收逻辑发送 以下模板代码均基于官方2023.07.17版本。 程序结构 #include "Config.h" #inc…

JSP技术讲解

目录 1、JSP简介 2、JSP体验 3、JSP运行原理 4、JSP基本语法 5、JSP指令 6、JSP内置九大对象 7、JSP标签 8、JSP配置 9、JSP排错 10、总结 在前面的Servlet学习中发现Servlet本质是一个java程序,因此Servlet更加擅长编写程序的业务逻辑,而如果要…

部署kafka后启动报错(坑):无法指定被请求的地址

启动kafka后报错:org.apache.kafka.common.KafkaException: Socket server failed to bind to 127.0.0.1:9092: 无法指定被请求的地址 1、编辑配置文件 vim config/server.properties 2、在listeners PLAINTEXT://your.host.name:9092下方添加服务器内外网地址配…

shpfile转GeoJSON;控制shp转GeoJSON的精度;如何获取GeoJSON;GeoJSON是什么有什么用;GeoJSON结构详解(带数据示例)

目录 一、GeoJSON是什么 二、GeoJSON的结构组成 2.1、点(Point)数据示例 2.2、线(LineString)数据示例 2.3、面(Polygon)数据示例 2.4、特征(Feature)数据示例 2.5、特征集合&…

Hass哈斯数控数据采集网络IP配置设置

机床数据采集(MDC)允许你使用Q和E命令通过网络接口或选项无线网络从控制系统提取数据。设置143支持该功能,并且指定控制器使用这个数据端口。MDC是一个需要一台附加计算机发送请求,解释说明和存储机床数据的软件功能。这个远程计算…

android 预加载进程

目录 一.背景 二.实现 1. 创建预加载服务类 2.清单文件中注册并制定 android:process 要预加载的进程 3.开启和停止 一.背景 做阅读器独立进程时,打开阅读器阅读页面所在的Activity,会出现白屏或黑屏 也就是说从一个进程activity跳转另一个进程的a…

【计算机毕业设计】基于SSM++jsp的电子竞技管理平台【源码+lw+部署文档+讲解】

目录 1 绪论 1.1 研究背景 1.2 目的和意义 1.3 论文结构安排 2 相关技术 2.1 SSM框架介绍 2.2 B/S结构介绍 2.3 Mysql数据库介绍 3 系统分析 3.1 系统可行性分析 3.1.1 技术可行性分析 3.1.2 经济可行性分析 3.1.3 运行可行性分析 3.2 系统性能分析 3.2.1 易用性指标 3.2.2 可…

明明是工作经验越久越吃香,为什么程序员却不是?

一般3年左右经验的程序员,了解到了这个行业的一些上升渠道和方法,其实也能发现,程序员也能得熬资历的,说通俗点也是越老越值钱。 比如当下有1年经验和3年经验的程序员,哪怕都是小公司背景,会发现工作年限越…

JavaScript数字分隔符

● 如果现在我们用一个很大的数字,例如2300000000,这样真的不便于我们进行阅读,我们希望用千位分隔符来隔开它,例如230,000,000; ● 下面我们使用_当作分隔符来尝试一下 const diameter 287_266_000_000; console.log(diameter)…

负载或反向代理服务器如何配置XFF以获取终端真实IP

文章目录 XFF介绍工作原理注意事项 配置方式1. Nginx2. HAProxy3. F5 BIG-IP4. Radware注意事项 本文介绍如何在反向代理或负载中配置XFF,方便后端服务获取请求来源的真实IP XFF介绍 X-Forwarded-For(简称XFF)是一个非标准的HTTP头部字段&a…

C++学习————第十天(string的基本使用)

1、string 对象类的常见构造 (constructor)函数名称 功能说明: string() (重点) 构造空的string类对象,即空字符串 string(const char* s) (重点)…