诚意满满之讲透事务

诚意满满系列每一篇都是精挑细选,从大众知识点到原理再到具体实现,争取把一个知识点从头到尾完整讲下来,足以应付面试与工作。让读者读完之后能够有一种:“这个知识我看这一篇就够了”的感觉是本系列最大愿望。

对于本人而言,在之前的学习中也发现,八股文讲得细致但不系统,而系统的学习往往又宽泛不细致,所以也打算取长补短,互相结合一下,欢迎大家收藏关注,持续更新。

事务

事务的常见定义:

事务是一种用于管理数据库操作的机制,它可以确保数据库的一组操作要么全部成功执行,要么全部回滚到初始状态,保证数据的一致性和完整性

换个角度来说,事务相当于将多个操作合并成一个操作,这个操作只有成功和失败两种结果,没有中间状态,就跟cpu指令一样,一个指令要么不执行,要么完全执行。当然,这么说是理想状态(懂得都懂),实际上不同的事务隔离级别会有不同效果,后文会详细讲到。

事务的四个特性:

  1. 原子性(Atomicity):事务中的所有操作要么都成功完成,要么都失败回滚。即事务是不可分割的,要么全部执行,要么全部不执行,不会出现部分执行的情况。

  2. 一致性(Consistency):事务的执行不会破坏数据库的一致性约束。在事务开始前和结束后,数据库的状态必须满足一定的一致性规则。

  3. 隔离性(Isolation):同一时间多个并发事务的执行互不干扰,每个事务都认为它是唯一正在执行的事务。事务的隔离性可以防止并发执行事务时出现脏读、不可重复读和幻读的问题。

  4. 持久性(Durability):一旦事务提交,其所做的修改将被永久保存在数据库中,即使系统发生故障,重新启动后也能够恢复到事务提交后的一致状态。持久性确保事务的结果是可靠的,不会因为系统故障而丢失。

原子性和持久性很好理解,隔离性会放到事务隔离级别里面会更好理解一点,暂不赘述。

单独讲讲一致性

一致性有点抽象,一致性的意思是说,嗯。。。,事务的执行不会破坏数据库的一致性约束。

咳,重点在这两句话的加粗字体:

1、事务的执行不会破坏数据库的一致性约束

2、在事务开始前和结束后,数据库的状态必须满足一定的一致性规则

拿耳熟能详的交易例子来说,假设在交易系统里只有两个人A和B,两个人的余额总额200块,无论两个人如何交易,最后两个人的余额加起来一定是=200。那么,这个“所有余额相加=200”就是一个一致性约束。

这时候*大的举手了:这个看起来是应用层的设定,好像和数据库没有关系?

没错,你可以理解一致性就是:应用系统从一个正确的状态到另一个正确的状态.而ACID就是说事务能够通过AID来保证这个C的过程.C是目的,AID都是手段

用《数据密集型系统分析与设计》中的一句话来说:

"ensuring the consistency is the responsibility of user, not DBMS."(保证一致性是用户的责任,而非数据库)

一个应用的一致性约束是什么,取决于具体的业务(像交易系统的总额不变),这个是由用户决定的,而不是数据库。数据库承担的作用是,它按照用户给定的事务去正常执行、提交或回滚后,不会破坏这个一致性约束。

前提是用户给的代码没有bug。如果在一次交易中,用户分成两个事务提交:买的提交一次,卖的提交一次,一旦在买和卖中间宕机,最后的总额对不上是板上钉钉的事。

因此,保证一致性是用户的责任,而非DBMS。

开胃菜先简短一点,后面还有

  • 事务的隔离级别以及不同隔离级别面临的问题
  • mysql如何实现事务隔离

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

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

相关文章

Unity 和 OpenCV:结合计算机视觉和游戏开发

文章目录 前言一、Unity 中集成 OpenCV1. 安装OpenCV plus Unity 插件2. 导入 OpenCV 包 二、图像处理应用程序的创建1. 实时轮廓检测2. 粒子发射器3. 碰撞区域 三、效果四、总结 前言 Unity 和 OpenCV 是两个强大的开发工具,分别用于游戏开发和计算机视觉。结合它…

复盘-PPT

调整PPT编号起始页码在设计→幻灯片大小 设置所有以及文本项目符号 ## 打开母版,找到对应级别设置重置 当自动生成的smartart图形不符合预期时

海纳斯Hinas安装Tailscale

海纳斯Hinas安装Tailscale 海纳斯安装Tailscale第一步,注册Tailscale账号,并在手机/电脑安装Tailscale第二步,进入海纳斯后台卸载重装Tailscale 海纳斯安装Tailscale 海纳斯自己安装了Tailscale,但是无法使用,需要卸载…

kibana 上dashbord 和discover 时间快 or 慢 8小时,处理方案

今天遇到了一个问题。在es库中的数据的时间是正确的。但是在kibana的discover展示页面上是错误的,错了8个小时。我这里是快了8个小时。这个问题非常难受,因为看起来,总是差8个小时,特别是查看日志的时候,总有一种错觉&…

【C++初阶】第五站:C/C++内存管理 (匹配使用,干货到位)

前言: 本文知识点: 1. C/C内存分布2. C语言中动态内存管理方式3. C中动态内存管理4. operator new与operator delete函数 5. new和delete的实现原理 (干货在此) 6. 定位new表达式(placement-new)7. 常见面试题 目录 C/C内…

【环境配置】Linux MySQL8 忘记密码解决措施

本片博客介绍 Linux 操作系统 Ubuntu 下,MySQL8 忘记密码怎么重新设置,笔者亲测有效,分享给大家。 查看 MySQL 版本 $ mysql --version停止 MySQL 服务器,并查看状态是否变更为 Server shutdown complete # 等价命令sudo syste…

EDA软件

EDA软件 EDA概念IC类EDA(芯片EDA软件)数字芯片和模拟芯片的区别模拟芯片产品种类IC设计类数字电路设计模拟电路设计 IC制造类IC封装类 PCB类EDA(板级EDA软件)Mentor公司板级EDACadence公司板级EDAAltium公司(已被日本瑞…

JavaScript高级Ⅲ

接上文 JavaScript高级Ⅱ JavaScript高级Ⅱ(全面版)-CSDN博客 第3章 正则表达式 3.1 正则表达式 RegExp 对象表示正则表达式,它是对字符串执行模式匹配的强大工具。 3.1.1 创建的方式 方式1: 正则表达式是JS中是一个类:RegExp Regular Exp…

Mysql - is marked as crashed and should be repaired

概述 上周发生了一个Mysql报错的问题,今天有时间整理一下产生的原因和来龙去脉,Mysql的版本是5.5,发生错误的表存储引擎都是MyISAM,产生的报错信息是Table xxxxxx is marked as crashed and should be repaired。 定位问题 产生的后果是Nginx服务没有…

iOS17.4获取UDID安装mobileconfig描述文件失败 提示“安全延迟进行中”问题 | 失窃设备保护

iOS17.4这两天已经正式发布, 在iOS 17.4版本中新增了一个名为"失窃设备保护"的功能,并提供了一个"需要安全延迟"的选项。 iOS17.4获取UDID安装mobileconfig描述文件失败 提示“安全延迟进行中”问题 | 失窃设备保护 当用户选择启用…

【Linux】常用操作命令

目录 基本命令关机和重启帮助命令 用户管理命令添加用户:useradd 命令修改密码:passwd 命令查看登录用户:who 命令查看登录用户详细信息 :w切换用户 目录操作命令cdpwd命令目录查看 ls [-al] 目录操作【增,删,改&#…

基于springboot的医院信息管理系统(程序+代码+文档)

** 🍅点赞收藏关注 → 私信领取本源代码、数据库🍅 本人在Java毕业设计领域有多年的经验,陆续会更新更多优质的Java实战项目,希望你能有所收获,少走一些弯路。🍅关注我不迷路🍅** 一、研究背景…