如何理解数据库事务?

news2024/11/19 15:39:34

目录

🐇今日良言:保持热爱  奔赴山河

🐉一、数据库事务

🐳1.概念

🐳2.使用

🐳3.特性


🐇今日良言:保持热爱  奔赴山河

 

🐉一、数据库事务

🐳1.概念

事务指逻辑上的一组操作,组成这组操作的各个单元,要么全部成功,要么全部失败。
事务能够把多个SQL打包到一起,变成一个整体.
以转账这个事情为例,假设小王给小马转账100,可以将其分为两个步骤:
1).小王账户余额-100
2).小马账户余额+100
再以下订单为例:
1).给商品表里的库存 -1
2).给订单记录 +1
无论是转账还是下订单,都要求两个步骤要么都执行,要么都不执行,如果在转账中出现,小马账户余额+100 而小王账户余额无变化,这种情况显然是不合适的,而 事务就是要保证出现这种不合理的状态.于是,事务就将多个操作打包成一个整体,要么都不执行,要么全部执行. 打包成整体这个操作,就称为"原子性",这个是事务的最最核心的特性!!!
如果执行到中间出错了,就让一个都不执行了,其实这里并不是一条都没执行,而是执行出错后,让已经执行的操作,恢复成执行之前的样子,看起来就好像是一个都没执行.
这个恢复操作,涉及到一个关键操作"回滚"(rollback). 
回滚就是把执行过的操作逆向恢复回去,类似于电脑上的 ctrl + z.  对于计算机而言,回滚操作是可以实现的,可是对于人而言,如果有回滚操作,该有多好,正如兰塞姆定律:“假如时光可以倒流,世界上将有一半的人可以成为伟人。
那么可以提出这样一个设想,既然有了回滚操作,那是不是就意味着,可以随便删库删表了?
其实不然,回滚操作是有很大开销的.最多就是把当前正在执行的事务保存下来,额外的东西不好再保存了.假设一个数据库有10亿条数据,占据了几百个G的空间,此时不可能花费几个T的空间来记录这10亿条记录都是怎么来的.

🐳2.使用

 

🐳3.特性

1).原子性.是事务的初心.保证操作要么都不执行,要么都执行.

2).一致性:事务执行前/执行后,都得是数据合法的状态.(例:转账不能出现钱转丢的情况)

3).持久性:事务产生的修改,都是会写入硬盘的.即使程序重启/主机重启/断电等,事务都可以

                正常工作.保证修改生效.

4).隔离性:一个数据库服务器,同时执行多个事务的时候,事务之间的"相互影响程度".

如果隔离性越高,就意味着事务之间的并发程度低.执行效率越慢,但是数据的准确性越高.

如果隔离性越低,就意味着事务之间的并发程度高,执行效率越快,但是数据的准确性越低.

在介绍mysql隔离级别之前,先来认识一下:脏读  不可重复读  以及 幻读问题.

举例:以小马是作家,儿子小布是读者为例介绍这三个问题.

脏读:读到"脏数据"(有问题的数据)

假设小马正在房间写网络小说,刚写到抢亲的情节,儿子小布进来看到这个抢亲的情节,看完之后小布就走了,小布走之后,小马将这个情节给删了,此时,小布读到的数据就是一个有问题的数据,这种情况就称为"脏读"问题.  事务A(小马)在写数据,事务B(小布)在读数据,,读写的是同一份数据.

解决脏读问题的办法,就是降低并发性,提高隔离性,也就是给这里的写操作加锁.当写操作加锁之后,此时,只有当小马写完以后,小布才可以进行读操作.

不可重复读:在一次事务中,连续两次读到的数据,结果不一样.

现在已经约定了写操作加锁,当小马写的时候,小布不能看.此时,当小马将写好的小说章节上传到读书APP后,小布到这个读书APP上开始阅读这个章节,在小布读的时候,小马觉得刚刚写的情节不是很好,于是又打开提交的小说,将里面的男女主甜蜜结婚的情节,改为了男女主双双嘎的情节,然后上传了,此时,小布刚看到男女主快要结婚的情节,但是突然小说情节突然变成了男女主都嘎了,此时,小布两次读到的数据都不一样,这个问题就是"不可重复读"问题.

解决不可重复读问题的办法,给读操作也加锁,小布在读小说的时候,小马不可以进行修改.

此时,这两个事务之间的并发程度,进一步降低了,隔离性进一步提高,运行速读进一步变慢,数据的准确性进一步提高.

幻读:在同一次事务中,两次读到的结果集不同.

当对写操作和读操作都加锁后,还是会有问题.小马总共写好了5个章节,将他们分别上传到了读书APP上,然后小布看到这本小说更新了5章,然后从第一章开始看,此时,小马又觉得最后一个章节写的不好,于是又将最后一个章节给删除了,此时,小布发现原本5个章节此时竟然成了4个章节,这个问题就是"幻读"问题.

解决幻读问题的办法,将事务串行化,彻底舍弃并发,只要读数据,写数据操作就停止

接下来,介绍一下MySQL提供的四个隔离级别

1.read uncommitted 

不做任何限制.事务之间都是并发执行的,并发程度最高,隔离性最低,会产生脏读+不可重复读+幻读.

2.read committed

对写操作加锁,并发程度降低,隔离性提高,解决了脏读问题,仍会产生不可重复读+幻读.

3.repeatable read(MySQL默认隔离级别)

对读操作和写操作都加锁了,并发程度又降低了,隔离性又提高了,解决了脏读+不可重复读,可能会出现幻读.

4.serializable

严格串行化,并发程度最低,隔离性最高.解决了脏读+不可重复读+幻读.执行速度最慢.

在开发中,就可以根据当前要解决的问题,来决定使用哪个隔离级别了.

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

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

相关文章

学生体育铅球网页设计作品静态HTML网页模板源码 大学生体育铅球网站制作 简单校园体育网页设计成品

🎉精彩专栏推荐 💭文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 💂 作者主页: 【主页——🚀获取更多优质源码】 🎓 web前端期末大作业: 【📚毕设项目精品实战案例 (10…

[附源码]JAVA毕业设计医院远程诊断系统(系统+LW)

[附源码]JAVA毕业设计医院远程诊断系统(系统LW) 项目运行 环境项配置: Jdk1.8 Tomcat8.5 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术…

SQLServer性能排查之CPU使用率过高的问题

【背景】 华北某SQLServer数据库从12月起出现CPU使用率过高的情况,一直未能够找到原因。当时电话简单将思路进行分享,反馈SQLServer中出现CPU使用率过高有许多可能原因,但常见的原因如下最为常见: 由于以下情况,表或…

【数据结构】跳表Skiplist

文章目录跳表--skiplistskiplist的概念skilplist的原理skilplist的实现随机值函数跳表节点跳表框架查找函数寻找前置节点添加元素删除元素打印链表测试结果Skiplist与其他Key-Value结构的比较跳表–skiplist skiplist的概念 skiplist本质上也是一种查找结构,用于解…

产品待办列表梳理(PBR)是什么?

产品待办列表(PBL)是Scrum框架下最重要的一个工件(Artifact),产品待办列表的梳理(Product backlog Refinement-PBR)也是一个重要的活动,它不同于Scrum的3-3-5-5。仔细阅读Scrum指南,对产品待办列表梳理活动的描述是有限的: “只有…

R语言基于树的方法:决策树,随机森林,Bagging,增强树

概观 本文是有关 基于树的 回归和分类方法的。最近我们被客户要求撰写关于决策树的研究报告,包括一些图形和统计输出。 视频:从决策树到随机森林:R语言信用卡违约分析信贷数据实例 从决策树到随机森林:R语言信用卡违约分析信贷…

『微信小程序从0到1』视图与逻辑

🐱‍🐉🐱‍🐉🐱‍🐉 请乘理想之马,挥鞭从此起程,路上春色正好,天上太阳正晴🐾🐾🐾/font> 🌈博客主页👉白小…

【SQL】主从复制

主从复制主从复制的作用主从复制的原理一主一从架构主从配置文件1.主机配置2.从机配置3.主机建立账户并授权4.从机:配置需要复制的主机5.测试6.停止主从同步binlog_format三种格式双主双从架构如何提升数据库并发能力:在实际工作中,我们常常将…

B站运营,B站游戏数据如何分析?

B站聚集了大部分年轻人,用户量和黏性一直持续增长,在B站,游戏也是重点发展的一个分区,而对于运营者想做好游戏运营也并非易事,想做好运营掌握游戏数据必不可少,那么应该如何查看游戏数据呢? 一…

童年 高尔基

每周读一本经典,大概从2022年11月开始了,目前已经读了4本,csdn平台更适合技术分享,知乎比较适合书籍分享 《童年》是高尔基三部曲中的第一部。坐在柳东图书馆像海水浸过的沙子般座椅,周末的下午沉浸在高尔基先生奇特的…

线程池应用(四)

线程池应用线程池线程池应用多线程应用同步和异步1. 需要等待结果1. join 实现(同步)2. Future 实现(同步)3.CompletableFuture 实现(异步)4. BlockingQueue 实现(异步)2. 不需等待结…

5分钟搞定,实现 定时任务 的五种方案!

我们在实际开发中,多多少少都会用到定时任务来处理一些问题。 比如金融项目中的对账,每天定时对昨天的账务进行核对,每个月初对上个月的账务进行核对等。 还比如,我们需要处理一些老数据迁移,修复一些新项目和老项目…

基于java+springboot+mybatis+vue+mysql的财务管理系统

项目介绍 随着信息技术和网络技术的飞速发展,人类已进入全新信息化时代,传统管理技术已无法高效,便捷地管理信息。为了迎合时代需求,优化管理效率,各种各样的管理系统应运而生,各行各业相继进入信息管理时…

CI24R1/SI24R1 2.4G无线传输技术--无线门铃

无线门铃是一种基于2.4G无线传输技术的智能家居产品,主要用于亲朋好友探访的语音提醒功能。此次方案采用2.4G无线通信设计,室内和室外子母机组网,在智能家居及办公场所等方面得到广泛的应用。 一、应用场景 适用于居民社区、家庭、公寓、酒店…

2-2-3-5-5、Disruptor详解

目录简介juc包下的队列存在的问题设计方案RingBuffer数据结构数据存取方案常用等待策略写数据流程单线程(一个生产者)多线程(多个生产者)多个消费者读数据多个生产者写数据核心概念使用构造器引入依赖单生产者单消费者模式创建Eve…

微信公众号开发——接收用户消息(图文、语言、上报位置、关注、取消关注)及自动回复

😊 作者: 一恍过去💖 主页: https://blog.csdn.net/zhuocailing3390🎊 社区: Java技术栈交流🎉 主题: 微信公众号开发——接收用户消息(图文、语言、上报位置、关注、取消关注)及…

推动MRO工业品数字化基建升级,数商云采购系统赋能企业采购数字化管理

MRO工业品是工业生产中的重要组成部分,经历了十余年的发展成长,市场规模持续增长,然而据数据显示,MRO工业品市场的线上渗透率仍停留在个位数,这意味着MRO工业品数字化采购仍有巨大的发展空间。 MRO工业品行业发展受困…

非零基础自学Golang 第1章 走进Go 1.1 Go编程语言概述 1.1.1 Go 的历史

非零基础自学Golang 文章目录非零基础自学Golang第1章 走进Go1.1 Go编程语言概述1.1.1 Go 的历史第1章 走进Go 1.1 Go编程语言概述 Go语言也叫Golang,是由谷歌(Google)公司在2007年推出的一款静态编译型语言。Go语言高效、简洁、容易上手&a…

上海诺基亚贝尔-S-010W-AV2B卡刷固件包

上海诺基亚贝尔-S-010W-AV2B卡刷固件包 固件特点: 1、修改dns,三网通用; 2、开放原厂固件屏蔽的市场安装和u盘安装apk; 3、无开机广告,无系统更新,不在被强制升级; 4、大量精简内置的没用的…

最新版Crack:MailBee.NET 2022最后版

MailBee.NET Items Package 包括 SMTP、POP3、IMAP、EWS、Security、Antispam、Outlook Converter、Address Validator、PDF 部件,以及作为免费功能的 BounceMail、HTML、MIME、ICalVCard 部件。MailBee.NET Objects是一组功能强大且功能丰富的 .NET 元素&#xff0…