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

news2024/12/27 23:31:58

事务与交易

一手交钱,一手交货

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

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.coloradmin.cn/o/1653390.html

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

相关文章

手游广告归因新选择:Xinstall助力精准衡量投放效果

在手游市场竞争日益激烈的今天,广告主们面临着如何精准衡量广告投放效果的难题。手游广告归因平台的出现,为广告主们提供了一种全新的解决方案。而Xinstall,作为其中的佼佼者,正以其独特的优势,助力广告主们破解这一难…

GIS 中的空间模式

空间模式显示了地球上事物的相互联系方式。这些图案可以是天然的或人造的。当我们使用 GIS 时,我们可以看到事物的位置以及它们之间的关系。今天,让我们关注地理和 GIS 领域的空间模式。 点分布的类型 点分布是将特定位置映射为地图上的单个点的方式。这…

如何用二维码实现现代仓库管理?(附详细实现过程)

简道云团队曾参与过近300企业的仓库管理软件的部署,要想知道如何实现用二维码管理仓库,首先要对整体流程有清晰的框架! 1、产品数据的录入2、设计电子库存卡3、库存盘点单4、库存盘点报表 总结一下就是——数卡单表,四步实现&…

USB3.0接口——(1)基础知识

1.背景 USB 3.0是一种USB规范,该规范由英特尔等公司发起。 USB协议版本 命名约定 USB-IF组织引入命名约定,将端口列为 USB 5 Gbps、USB 10 Gbps、USB 20 Gbps 、USB 40 Gbps,而不使用版本号。获得 USB-IF 认证的 USB 产品的制造商会获得带…

WEB基础--JDBC基础

JDBC简介 JDBC概述 数据库持久化介绍 jdbc是java做数据库持久化的规范,持久化(persistence):把数据保存到可掉电式存储设备(断电之后,数据还在,比如硬盘,U盘)中以供之后使用。大多数情况下,特别是企业级…

oc渲染器如何设置调渲染更快?oc云渲染加速助力

OC渲染器是Cinema 4D软件中广泛使用的渲染工具,它利用GPU进行硬件加速渲染,具备强大的计算性能。这使得它能够为产品和动画制作人员提供卓越的渲染质量。此外,OC渲染器还支持云渲染技术,这在需要进行大规模渲染任务时非常有用&…

我独自升级崛起账号注册 我独自升级怎么注册账号

近期,《我独自升级》这部动画凭借爆棚的人气,在各大平台上掀起了一阵观看热潮,其影响力不容小觑。借此时机,韩国游戏巨头网石集团敏捷响应,顺势推出了同名游戏《我独自升级:ARISE》,为粉丝们搭建…

微信社交平台的未来展望,2024微信的重点发展趋势

WeChat社交媒体平台概述 截至2024年,WeChat的月活跃用户超过13亿,预计到今年年底,WeChat用户将超过16.7亿。当然,全球WeChat用户数量的数字表明,该应用程序在世界上最受欢迎的应用程序中排名第五(仅次于Fa…

程序员有什么实用神器?

程序员的实用神器 在软件开发的海洋中,程序员的实用神器如同航海中的指南针,帮助他们导航、加速开发、优化代码质量,并最终抵达成功的彼岸。这些工具覆盖了从代码编写、版本控制到测试和部署的各个环节。 程序员常用的一些神器包括&#xf…

强烈推荐-程序员必备工具

uTools 新一代效率工具平台。呼之即来,即用即走,打造你的个人效率助理https://u.tools/?cxdawijbcmx

WebDAV之π-Disk派盘 + 溯记

“溯记”是一款提供丰富功能的时间轴日记应用,旨在帮助用户记录生活中的碎片化想法和事件,并提供便捷的回顾和管理功能。根据您提供的描述,这款应用具有丰富的特性,包括时间轴浏览、多媒体支持、实时存储、模糊搜索、日历视图、故事关联和随机回溯。这些功能将帮助用户记录…

后端常用技能:基于easy-poi实现excel一对多、多对多导入导出【附带源码】

0. 引言 在业务系统开发中,我们经常遇到excel导入导出的业务场景,普通的excel导入导出我们可以利用 apache poi、jxl以及阿里开源的easyexcel来实现,特别easyexcel更是将excel的导入导出极大简化,但是对于一些负载的表格形式&…

python作业五

题目:注册登录 制作一个注册登录模块 注册:将用户填入的账户和密码保存到一个文件(users.bin) 登陆:将用户填入账户密码和users.bin中保存的账户密码进行比对,如果账户和密码完全相同 那 么登录成功,否则登录失败…

Windows 驱动程序自签名流程

Windows 官方案例https://github.com/microsoft/Windows-driver-samples。编译通过了,都是Test Sign。这里找到一种自签名的方法,记录一下。文章来源https://konata.tech/2020/10/16/signWindowsDriver/ 创建自签名证书 从 Windows PowerShell 3.0 版本…

Spring事件

📝个人主页:五敷有你 🔥系列专栏:Spring⛺️稳中求进,晒太阳 Spring事件 简洁 Spring Event(Application Event)就是一个观察者模式,一个bean处理完任务后希望通知其他Bean的…

QGIS编译

一,安装:OSGeo4W 二,安装:Cygwin64 https://www.cygwin.com/setup-x86_64.exe 三,安装: 安装bison和flex 四)QGIS_3.28 下载QGIS_3.28的源码包 五 环境变量设置: echo off set VS19…

基于springboot实现校园失物招领系统【项目源码+论文说明】

基于springboot实现校园失物招领系统演示 摘要 身处网络时代,随着网络系统体系发展的不断成熟和完善,人们的生活也随之发生了很大的变化,身边经常有同学丢失了东西或者衣服而烦恼,为了找到自己心爱的物品疲于奔命,还不…

使用电路仿真软件教学的优势分析

随着科技的飞速发展,电子工程领域对人才的需求与日俱增。为了满足这一需求,教育者们不断探索着更加高效、直观的教学方法。电路仿真软件的出现,为电子工程教学注入了新的活力,它以其独特的优势,成为现代电子工程教育中…

YOLO v6 iou_loss dfl_loss一直为0

Question img record infomation path is:…/mydata/images.train_cache.json Train: Final numbers of valid images: 1248/ labels: 1248. 0.1s for dataset initialization. img record infomation path is:…/mydata/images.val_cache.json Convert to COCO format 100%|█…

Go微服务精讲:Go-Zero全流程实战即时通讯(超清)

go-zero 是一个集成了各种工程实践的 web 和 rpc 框架。通过弹性设计保障了大并发服务端的稳定性,经受了充分的实战检验。 Go微服务精讲:Go-Zero全流程实战即时通讯(超清) go-zero 中的 api,rpc,数据库等涉及的代码,…