范文健康探索娱乐情感热点
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文

数据库详解之事务

  究竟什么是数据库的事务,为什么数据库需要支持事务,为了实现数据库事务各种数据库的是如何设计的。还是只谈理解,欢迎大家来讨论。
  1. 数据库事务是什么
  事务的定义,已经有太多文章写过,我就不重复了。我理解的事务就是用来保证数据操作符合业务逻辑要求而实现的一系列功能。换句话说,如果数据库不支持事务,上面业务系统的程序员就需要自己写代码保证相关数据处理逻辑的正确性。而数据库事务就是把一系列保证数据库处理逻辑正确性的通用功能在数据库内实现,并且尽量提高效率。
  举个例子,数据库最开始普及就是在金融业,银行的存取款场景就是一个最典型的OLTP数据库场景,而事务就是设计用来保证类似场景的业务逻辑正确性的。
  ![事务的四个基本特性](https://img-blog.csdnimg.cn/2967b3d9484c405289d711ef5bf69890.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAd2luZHRhbGtlcnd5,size_20,color_FFFFFF,t_70,g_se,x_16)
  **原子性**,如果你要给家人转账,必须在你的账户里扣掉100块,在家人账户里加上100块,这两笔操作需要一起完成,业务逻辑才是正确的。但是程序在做修改的时,肯定会有先后顺序,试想一下程序扣了你的钱,这个时候程序崩溃了,家人账户的钱没有加上。那这100块是不是消失了?你是不是要发疯?那么,就把这两笔操作放进一个事务里,通过原子性保证,这两笔操作要么都成功,要么都失败。这样才能保证业务逻辑的正确性。
  **一致性**,有很多文章讲过一致性,但是很多人会把一致性跟原子性混在一起说。事务的一致性指的是指每一个事务必须保证执行之后所有库内的规则依旧成立。比如内外键,constraint,触发器等。举例来说,你在储蓄卡里有100元,理财账户里有100元,基金账户有100元,那么你在资产总和里会看到300元,这个300元必须是其他三个账户余额加在一起得到的。你在给家人转帐100元是从储蓄卡里转出去了100元,那么在数据库上可以通过创建触发器的方式,当储蓄卡余额账户减100元的同时,把资产总和也同步减去100,不然的话,就会出现逻辑上的错误,因为你已经转走了100块储蓄卡余额,实际资产总和应该是200,如果还是300,数据库状态就不一致了。所以实现事务的时候,必须要保证相关联的触发器以及其他所有的内部规则都执行成功,事务才能算执行成功。如果在减去资产总时出错,那么这笔转帐交易也不能成功。因为这样数据库就会进入不一致的状态。
  那么这里跟原子性的区别到底在哪里呢?原子性是指个多个用户指令之间必须作为一个整体完成或失败,而一致性更多是数据库内的相关数据规则必须同时完成或失败。
  **持久性**,最容易理解的一个,事务只要提交了,那么对数据库的修改就会保存下来不会丢了。简单来说,只要提交了,数据库就算崩溃了,重启之后你刚存的100块依然在你的账户里。
  **隔离性**,每个事务相对于其他的事务是有一定独立性的,不能互相影响。因为数据库需要支持并发的操作来提高效率。在并发操作时,一定要通过操作之间的隔离来保证业务逻辑的正确性。比如,你转帐100块给家人,一系列操作的最后一步可能是输入验证码,这个时候转帐还没有完成,但是在数据库里你的账户对应的记录中已经减去100块,家人账户也加了100块,就等着验证码输入以后,事务提交,完成操作。那么,这个时候,家人通过手机银行能够查到这100块么?你的答案可能是不能,因为这样才符合业务逻辑,因为你的转帐操作还没有提交,事务还没有完成。那么数据库就应该保证这两个并发操作之间具有一定的隔离性。
  那么到底应该隔离到什么程度呢?隔离性又分为4个等级:由低到高依次为Read uncommitted(读未提交)、Read committed(读提交)、Repeatable read(可重复读取)、Serializable(序列化),这四个级别可以逐个解决脏读、不可重复读、幻象读这几类问题。这些东西是什么意思?请有兴趣的小伙伴自行百度,很多文章都写的很清楚。
  那么怎么理解不同的隔离等级呢,首先要理解并发操作,并发操作就是指有不同的用户同时对一个数据进行读、写操作,那么在这个过程中,每个用户应该看到什么数据才能保证业务逻辑的正确性呢? 如果是前面存取款的场景,我必须看到的是已经存进来的钱,也就是必须是已经提交的事务。而12306刷火车票呢,你可以看到有10张余票,但是在下单的时候告诉你票卖完了,因为同时有10个用户把票买掉了,你需要重新刷余票,这个也是可以接受的,也就是说我可以读到一些虚假的余票,这样在业务上也没有什么问题。那么在设计这两个不同系统时,就可以选择不同的事务隔离级别来实现不同的并发效果。不同的隔离等级就是要在系统的并发性和数据逻辑的严谨性之间做出的平衡。
  2. 数据库如何实现事务
  数据库实现事务会有多种不同的方式,但基本的原理类似,比如都需要对事务进行统一的编号处理,都需要记录事务的状态(是成功了还是失败了),都需要在数据存储的层面对事务进行支持,以明确哪些数据是被哪些事务、插入、修改和删除的。同时还会记录事务日志等,对事务进行系统化的管理以实现数据的原子性,一致性和持久性。
  要实现事务的隔离性,最基础的就是通过加锁机制把并发操作适当的串行化来保证数据操作的正确逻辑。但是为了要保证系统具有良好的并发性能,必须要在实现事务隔离性时需要找到合理的平衡点。大部分数据库(包括Oracle,MySQL,Postgres在内)在做并发控制的时候都会采用MVCC(多版本并发控制)的机制来保证系统具有较高的并发性,不同数据库实现MVCC的具体方案也不尽相同,但其基本原理类似。
  3. MVCC实现原理
  所谓MVCC,就是数据库中的同一查询根据相关事务执行的先后顺序以及隔离级别的不同,可能会存在不同版本的结果,通过这样的手段来保证大部分查询操作不会被修改操作阻塞并保证数据逻辑的正确性。也就是数据库通过保存多个版本的数据(历史数据)来提高系统的并发查询能力。简单来说就是用存储空间来交换并发能力。下面以Postgres为例介绍一下MVCC的一种实现方式帮助大家理解这个重要的数据库概念。通过下面的图来解释Posrgres里最基本的数据可见性是如何实现多版本控制的。
  ![在这里插入图片描述](https://img-blog.csdnimg.cn/fd880f62b48d4a43986fa9c7d1a79e4e.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAd2luZHRhbGtlcnd5,size_20,color_FFFFFF,t_70,g_se,x_16)
  首先,Postgres里的每一个事务都有编号,这里可以简单理解为时间顺序编号,编号越大的事务发生越晚。然后,数据库里的每一行记录都会保存创建这条记录的事务号(Cre),也会在记录删除时保存删除这条记录的事务号(Exp),换句话说,只要Exp这里一列里记录了事务编号,就说明这条记录被删除了。那么一个事务应该能看见那些记录呢?Postgres里每一个事务都会保存一个当前系统的事务快照(Snapshot),这个快照里会保存事务创建时当前系统的最高(最晚)事务编号,以及目前还在进行中的事务编号。那么如上图所示的一个事务的快照里最高事务编号为100,目前正在进行的事务有25,50和75。那么对应左边数据记录,这6行数据的可见性就如同标注的一般:
  第一行,Cre 30,没有删除,在100这个时间点,应该能看到。
  第二行,Cre 50,没有删除,但是50这个事务还没有提交,正在进行中,所以看不见。
  第三行,Cre 110,没有删除,但是100这个时间点110事务还没有发生,所以看不见。
  第四行,Cre 30,Exp 80,在80的时候数据被删掉了,所以看不见。
  第五行,Cre 30,Exp 75,在30的时候被创建,75时候被删掉了,但是75这个事务在100的时候还没有提交,所以这条记录在100的时候还没有删掉,所以看得见。
  第六行,Cre30,Exp 110,在30的时被创建,110时候被删掉,但是在100时候,110还没有发生,所以看得见。
  综上,就是这个事务对这六条记录的可见性,也就是一个数据版本。那么大家可以看一下如果另一个事务的快照里存的是最高事务编号为110,正在进行的事务为50,那么它能看到的数据应该是哪几行呢?同时大家也看到,Postgres里删除一行数据其实就是在这一行的Exp这个列记录一个删除事务的编号,相当于做了一个删除标记,而数据没有真正被删除,因此Postgres数据库需要定期做数据清理操作(Vacuum)。Pstgres的在现实场景里会比这里介绍的要复杂,因为我们这里假定所有的事务最终都是正确提交了,如果存在某些事务没有提交的情况,那么可见性就会更加复杂,这里不再展开了。
  数据库事务是基本的数据库概念,之前已经有很多很好文章做过介绍,这里希望能把自己的理解用比较通俗的描述分享给大家,欢迎来讨论交流。

阿里巴巴的天使投资人孙正义和他的软银集团根据日本投资顾问机构评选出的日本最伟大的实业家创始人中,孙正义排名第8位。在2021年福布斯排行榜中,孙正义以身价446亿美元,排名世界第33位日本第1位。他改变了日本人的互联网移三星在蓉展示新一代折叠屏手机GalaxyZFold35G和Flip35G折叠屏手机开辟了智能手机的全新品类,如今,三星折叠手机已经进化至第三代。9月17日,三星在成都春熙路设立快闪店并举行品鉴活动,展示其刚刚开售的新一代折叠屏手机三星GalaxyZFo苹果A15骁龙895三星Exynos2200天玑2000,即将硬刚到底20202021年的手机芯片市场因为华为麒麟芯片无法量产而显得少了一些乐趣,但从今年秋季开始,一切可能就完全不一样了!伴随着苹果新iPhone系列的发布,苹果的最新仿生芯片A15也你知道苹果为什么不取消ampampquot刘海ampampquot吗?苹果iPhoneX的刘海屏出来的时候,我相信很多网友都吐槽它的小刘海,真的是太丑啦。虽然丑但苹果毕竟是手机界的大哥大,当时的苹果iPhoneX还是受到很多苹果粉丝的追捧,甚至有的果一日三餐不重样,云米AI抽油烟机EyeBot2烟灶套装让你生活更优雅生活需要仪式感,即使再忙碌的日常,一日三餐也需要重视,不仅要营养健康更要色香味俱全。可咱们刚成家的年轻人,能烧个西红柿鸡蛋汤就很不错了,怎么可能在每天的一日三餐还能变着花样来?新上5款最新旗舰手机温度横评华为令人意外,iQOO发热最高最近发布了很多安卓旗舰手机,这些手机的体验究竟如何,其实不能只看处理器屏幕相机,还要看机身发热,根据小白测评公布的最新温度测试,华为P50Pro温度表现令人意外,是5款新旗舰机中温旧电脑如何装固态硬盘一个同事,觉得电脑启动太慢了,想装一个固态硬盘。我开始也没装过,我走过一些弯路,我开始以为把数据线和电源线连接好就可以了,然后没什么效果。因为这个不像装新电脑,从一开始装,开始一头台电越来越懂用户需求了,新品高颜与8G运存竟只是开胃菜?都说官方玩黑科技不可怕,就怕官方玩设计,毕竟设计这把双刃剑着实有些不好拿捏。可是,在有前车之举的借鉴,不再玩一把又怎如好坏呢?对台电而言,每一次的摸索不止是对自身负责,还会考虑粉丝在性价比方面,iPhoneXR才是YYDS!但要注意翻新机大家都在研究iPhone13。但小编觉得,如果你预算不允许,完全没有必要研究iPhone13,看点性价比高的iPhone不香吗?比如性价比之王iPhoneXR,iPhoneXR被很无塑封包装的iPhone13系列包装盒如何打开?只需一拉新的iPhone13系列更低调的变化之一是手机的重新设计的包装。去年,随着充电适配器和EarPods的省略,带来了迄今为止最薄的iPhone包装盒。今年,苹果将做出另一项改变,取消拼多多百亿补贴上架iPhone13系列领券直降500元今日拼多多平台百亿补贴活动正式公布了苹果iPhone13系列的补贴价格。据拼多多百亿补贴活动显示,iPhone13miniiPhone13iPhone13ProiPhone13Pr
西街快评拧巴在裁员潮里的互联网人才供需中国互联网行业高校毕业生人才供需研究报告阶段性成果12月30日披露,2021年全国毕业生总数900余万人,互联网行业高校毕业生增速远高于全国平均水平大数据云计算和智能技术类等热门专新希望,三安光电,牧原股份,天齐锂业,长电科技,通富微电加油新希望主营是猪肉。三安光电半导体。湖北宜化是磷化工。牧原股份猪肉。芯能科技光伏概念,包钢股份,隆基股份光伏行业清洁能源的公司,也是国家重点支持的产业。有光伏建筑一体化项目,万物皆利都说固态硬盘寿命短,那么有谁把使用寿命用完了吗?我这刚坏一个!西数的。牌子不可谓不响,但是它就是有问题了,数据复制到39,卡壳了,死机了!换一个新的。检测一下,发现40附近,全部坏道了!从新机安装到如今,也就4年左右,现在罢工了海信发布8K激光显示解决方案中证网讯(王珞)2022年1月5日,在拉斯维加斯举办的国际消费类电子产品展览会(CES2022)上,海信发布8K激光显示技术方案120英寸激光电视新品,再次成为CES展会的焦点。海openwrt安装软件包后提示ampampquot权限不足,无法读取UCI配置ampampquot解决方案usrsharerpcdacl。dlucibase。json文件添加下面内容是json文件,注意格式unauthenticateddescriptionAllowsystemfea加速解决物联网生态及设备割裂难题,边无际Edgenesis基于云原生架构开发IoT开源开发平台作者韦世玮编辑石亚琼物联网(IoT)这股浪潮在国内市场已经掀起数年,从开发平台到操作系统,从上游零部件到下游终端设备,各个细分赛道都少不了新玩家摩拳擦掌的身影。日前,36氪接触到的中国移动登陆A股,其趋势如何?今天,10年来最大规模的IPO,中国移动(600941)于A股正式发行,截止到下午14时,移动股价微涨2,很符合其身份。中国移动是世界上用户数量最多的电信运营商,目前主营收入来自于让复杂场内物流跟着导航走阅读提示从工厂发货的那一刻开始,货物就被实时跟踪,一旦经过物流门,智慧物流系统的信息接收器还会把货物分配区域和储存货位等信息发送给相关工作人员,最终显示出货物运输的最佳路径。刘XX寺库否认破产,称将保留追责权利据悉,此前有媒体报道称寺库集团被申请破产。对此,寺库方面否认称经核实,不存在以上情况,公司将保留追责的权利据天眼查信息显示,北京寺库商贸有限公司新增破产审查案件,申请人为柴晨旭,经两行代码,为Python脚本生成命令行有时候我们会有这样的一个需求我们定义了一个Python的方法,方法接收一些参数,但是调用的时候想将这些参数用命令行暴露出来。比如说这里有个爬取方法importrequestsdef小米全新高像素屏下前摄正在测试据博主数码闲聊站爆料,小米正在测试测试高像素屏下前摄,支持FHD,采用华兴光电方案。同时该博主表示屏下摄像头市场未能达到小米预期,所以小米没有推出定位更低的屏下摄像头手机。去年8月