当前位置:网站首页>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.幻读
一个事务范围内两个相同的查询却返回了不同数据,对应的是插入操作。
为了方便大家记忆,我将事务的隔离级别和出现的并发问题总结了如下表格:
特征||问题 | 脏读 | 不可重复读 | 幻读 |
读未提交 | √ | √ | √ |
读提交 | √ | √ | × |
可重复读 | √ | × | × |
可串行化 | × | × | × |
最后祝各位宝子们读后必有所获^_^!!!
还有!还有!你还相信光吗???
边栏推荐
- Intel oneapi - opening a new era of heterogeneity
- Attack and defense world misc practice area (simplerar, base64stego, no matter how high your Kung Fu is, you are afraid of kitchen knives)
- 中间件漏洞复现—apache
- Statistics 8th Edition Jia Junping Chapter 14 summary of index knowledge points and answers to exercises after class
- 7-11 mechanic mustadio (PTA program design)
- Mathematical modeling idea of 2022 central China Cup
- Hackmyvm target series (4) -vulny
- 内网渗透之内网信息收集(二)
- [err] 1055 - expression 1 of order by clause is not in group by clause MySQL
- Detailed explanation of network foundation routing
猜你喜欢
网络基础详解
Internet Management (Information Collection)
[VMware abnormal problems] problem analysis & Solutions
记一次,修改密码逻辑漏洞实战
内网渗透之内网信息收集(四)
xray与burp联动 挖掘
Intranet information collection of Intranet penetration (I)
中间件漏洞复现—apache
Apache APIs IX has the risk of rewriting the x-real-ip header (cve-2022-24112)
Uibutton status exploration and customization
随机推荐
攻防世界MISC练习区(SimpleRAR、base64stego、功夫再高也怕菜刀)
Intel oneapi - opening a new era of heterogeneity
Experiment 6 inheritance and polymorphism
记一次edu,SQL注入实战
XSS (cross site scripting attack) for security interview
Web vulnerability - File Inclusion Vulnerability of file operation
JDBC事务、批处理以及连接池(超详细)
内网渗透之内网信息收集(二)
Force deduction 152 question multiplier maximum subarray
Uibutton status exploration and customization
《统计学》第八版贾俊平第十二章多元线性回归知识点总结及课后习题答案
HackMyvm靶机系列(7)-Tron
Intranet information collection of Intranet penetration (2)
Hcip -- MPLS experiment
Markdown font color editing teaching
Spot gold prices rose amid volatility, and the rise in U.S. prices is likely to become the key to the future
Sentinel overall workflow
《英特尔 oneAPI—打开异构新纪元》
Experiment 8 exception handling
An unhandled exception occurred when C connected to SQL Server: system Argumentexception: "keyword not supported:" integrated