当前位置:网站首页>Mysql的事务是什么?什么是脏读,什么是幻读?不可重复读?
Mysql的事务是什么?什么是脏读,什么是幻读?不可重复读?
2022-07-06 09:23:00 【飘飘~】
提示:虽然事务在实际工作中的作用不是很大,但在校招笔试,面试中是数据库的重点考试题目!!!所以宝子们要打起十二分精神阅读本篇文章!!!
目录
前言:
Mysql关系型数据库是默认开启事务的,本篇文章将使用MySQL数据库和Navicat为大家讲解事务。本文将详细介绍什么是事务,事务的四大特征,事务的隔离级别,那就让我们开始今天的学习吧!
一、什么是事务
我们首先来看看官方对于事务的定义:
事务,就是将一组SQL语句放在同一批次内去执行,如果一个SQL语句出错,则该批次内的所有SQl都将被取消执行。
注意:MySQL数据库中仅仅innoDB和BDB类型的数据库表支持事务!
如果没有理解官方概念,不要慌!让我们一起来看看下面这个例子:
话说五百年前的m78星云有个叫佐菲的虽然是宇宙警备队队长,但他一出场总挨揍,于是想买身盔甲让自己更加仁兄抗揍些,所以然就去了地球找到了某迦买战甲。。。
仁兄,你这泡泡龙战衣服看着不错,给我来十沓。
可以啊!老哥有眼光,这就给你打包好!!!
但是佐菲老穷了,拿着战甲就想跑w(゚Д゚)w
那我们想想,佐菲拿衣服不交钱这行不行啊!这显然是不行的!
于是迪迦说:"必须一手交钱一手交货,这才算是一个完整的交易!"
事务的体现:交钱和交货必须全部完成,事务才算成功,任何一个活动失败,整个事务就失败了!
我们再来看看两个对于事务的理解:
理解一:
事务可以看做是一次大的活动,它由不同的小活动组成,这些活动要么全部成功,要么全部失败。
理解二:
事务可以看做是一个大的操作,它由一系列操作组成,这些操作要么全部成功,要么全部失败。
二、事务的隔离级别
1、原子性(Atomicity)
是指事务包含的所有操作要么全部成功,要么全部失败,因此事务的操作如果成功就必须要完全应用到数据库,如果操作失败则不能对数据库有任何影响。
我们再来想想,佐菲虽然没有大钱,但他还是有那么点私房钱的,于是给迪迦说,能不能分期付款,但迪迦却说,大哥啊,小老弟我这也是小本买卖,必须一次付清,概不赊账!!!
事务体现:原子性就是不可在分割,钱就不能分期付。
2、一致性(Consistency)
是指事务必须使数据库从一个一致性状态变换到另一个一致性状态,也就是说一个事务执行之前和执行之后都必须处于一致性状态。
佐菲实在没办法,只能找他的三弟赛文借钱,佐菲说:“你看大哥借你91还你1块行不,去个零头”
赛文听了顿时大吃一惊:“虽然你是我好大个,但也不能这样欺负你小老弟啊,必须借多少还多少!!!”
事务体现:在一次借钱过程中,借多少必须与之后还多少保持一致。
3、隔离性(Isolation)
是指当多个用户并发访问数据库时,比如操作同一张表时,数据库为每一个用户开启的事务,不能被其他事务的操作所干扰,多个并发事务之间要相互隔离。
问赛文借完,佐菲突然感觉自己暴富了,于是想买更好的战甲,但钱又有些不太够,于是又问他的二弟初代借钱:“二弟啊!你看大哥最近手头有些紧,要不你借大哥点money,到时候大关还三弟钱就当给二弟你还钱了”
初代一听,顿时不知所措:“大哥啊!三弟是三弟,你问我俩借的钱互不相干啊!该还钱还得还!!!”
事务体现:佐菲向赛文和初代借的钱有关系没,显然是没有关系的,并且向初代借钱或者还钱不影响向赛文借钱还钱。这个过程是不受其他部分影响的。
4、持久性(Durability)
是指一个事务一旦被提交,那么对数据库中的数据的改变就是永久性的,即便是在数据库系统遇到故障的情况下也不会丢失提交事务的操作。
佐菲终于拿着钱买到了心心念念的战甲,于是迫不及待的去找小怪兽单挑,结果一出场虽然打出了十八般武艺,但怎料战甲还是被一掌击碎,这时候就算佐菲在伤心,战甲已然碎裂,无法复原。
事务体现:事务一旦提交,对数据库数据改变是永久性的!!!
三、实现事务的方法和步骤
四、事务的隔离级别
Read Uncommited,读未提交:
即一个事务可以读取另一个未提交事务的数据;并发操作会导致脏读
Read Commited,读操作:
即一个事务要等到另一个事务提交后才能读取数据;解决脏读问题;并发操作会导致不可重复读
Repeatable Read,重复读:
即开始读取数据(事务开启)时,不再允许修改操作;解决不可重复读问题;并发操作会导致幻读(对应insert操作)
Serializable,可串行化:
最高的事务隔离级别,该级别下,事务串行化顺序执行;避免脏读、不可重复读与幻读;但是该级别效率低下,比较消耗数据库性能,一般不用。
我们下面来看看几种隔离情况下会出现的并发问题:
1.脏读
一个事务读取另一个未提交的数据。
2.不可重复读
一个事务范围内,两个相同的查询却返回了不同数据。
3.幻读
一个事务范围内两个相同的查询却返回了不同数据,对应的是插入操作。
为了方便大家记忆,我将事务的隔离级别和出现的并发问题总结了如下表格:
特征||问题 | 脏读 | 不可重复读 | 幻读 |
读未提交 | √ | √ | √ |
读提交 | √ | √ | × |
可重复读 | √ | × | × |
可串行化 | × | × | × |
最后祝各位宝子们读后必有所获^_^!!!
还有!还有!你还相信光吗???
边栏推荐
- 内网渗透之内网信息收集(三)
- 《统计学》第八版贾俊平第十三章时间序列分析和预测知识点总结及课后习题答案
- xray与burp联动 挖掘
- Build domain environment (win)
- Record an API interface SQL injection practice
- 网络基础之路由详解
- Realize applet payment function with applet cloud development (including source code)
- HackMyvm靶机系列(4)-vulny
- sqqyw(淡然点图标系统)漏洞复现和74cms漏洞复现
- Experiment 6 inheritance and polymorphism
猜你喜欢
内网渗透之内网信息收集(四)
搭建域环境(win)
HackMyvm靶机系列(1)-webmaster
Binary search tree concept
Hackmyvm target series (5) -warez
An unhandled exception occurred when C connected to SQL Server: system Argumentexception: "keyword not supported:" integrated
记一次edu,SQL注入实战
How to earn the first pot of gold in CSDN (we are all creators)
xray與burp聯動 挖掘
《统计学》第八版贾俊平第二章课后习题及答案总结
随机推荐
MSF generate payload Encyclopedia
HackMyvm靶机系列(2)-warrior
Apache APIs IX has the risk of rewriting the x-real-ip header (cve-2022-24112)
《统计学》第八版贾俊平第二章课后习题及答案总结
7-7 7003 combination lock (PTA program design)
HackMyvm靶机系列(7)-Tron
msf生成payload大全
Experiment 6 inheritance and polymorphism
C language file operation
Attack and defense world misc practice area (GIF lift table ext3)
Interpretation of iterator related "itertools" module usage
链队实现(C语言)
Middleware vulnerability recurrence Apache
Load balancing ribbon of microservices
Experiment five categories and objects
Hackmyvm target series (1) -webmaster
Captcha killer verification code identification plug-in
XSS (cross site scripting attack) for security interview
On the idea of vulnerability discovery
XSS之冷门事件