Mysql事务的四大特性(ACID)和事务隔离级别

news/2024/7/24 8:47:46 标签: mysql, sql, 数据库

sqlACID_0">Mysql事务的四大特性(ACID)和事务隔离级别

文章目录

  • Mysql事务的四大特性(ACID)和事务隔离级别
    • 一.什么是事务?
    • 二.打个比方
    • 三.事务的四大特性是什么?
    • 四.事务隔离级别有哪些?
      • 读未提交(Read Uncommitted):
      • 读提交(Read Committed):
      • 可重复读取(Repeatable Read):
      • 序列化(Serializable):

一.什么是事务?

​ 一句话—>事务是一个程序执行单元。

​ 是指在访问,更新数据库中数据时的一个不可分割的执行单元。也就是要么不做,要做就做完。不能做一半就不做了。

二.打个比方

小何给女朋友小美转账了520元,正常情况下,小何的账户上面应该减少520元,小美的账户上增加520元,但是现在出现了一些问题。小何的账户上减少520元,系统正想让小美的账户上面增加520元,这个时候,银行系统崩了。这下就出现问题了,小何520元减少了,但是小美的账户上面却没有到账520元,小美一气之下把小何拉黑了,可想而知。这个后果是多么的严重。

三.事务的四大特性是什么?

  1. 原子性(Atomicity):一个事务是一个不可分割的工作单位,事务中包括的操作要么都做,要么都不做。
  2. 一致性(consistency):事务必须是使数据库从一个一致性状态变到另一个一致性状态。一致性与原子性是密切相关的,就是可以执行完成一个事务后,数据库不存在只执行一部分的事务,就可以就理解成如果小何小美完成了转账功能。这个时候就是一致的。
  3. 隔离性(isolation):一个事务的执行不能被其他事务干扰。即一个事务内部的操作及使用的数据对并发的其他事务是隔离的,并发执行的各个事务之间不能互相干扰。
  4. 持久性(durability):持久性也称永久性(permanence),指一个事务一旦提交,它对数据库中数据的改变就应该是永久性的。接下来的其他操作或故障不应该对其有任何影响。

四个特性怎么记

:为啥记不住,因为你还隔着一个主持,还没有看破红尘。(如果不是实在记不住,请勿使用)

四.事务隔离级别有哪些?

读未提交(Read Uncommitted):

​ 允许脏读取,但不允许更新丢失。如果一个事务已经开始写数据,则另外一个事务则不允许同时进行写操作,但允许其他事务读此行数据。该隔离级别可以通过“排他写锁”实现。

举个例子:小何其实是准备给小美转520元的,但是按岔了成250于是250块钱被转给了小美,当然这个时候小何还没有提交事务。这个时候小美一下看到了账户上面的250,十分的生气,啪的一下子就小何拉黑了。手机扔到了一边。小何在转账的时候也发现了转成了250,连忙回滚事务,将转账金额改成了520后才提交了事务。然后小何开心的拿起手机,发信息给小美,却发现被拉黑了。。。而这个时候,其实小何账上少了520,小美多了520,但是小美手机扔到了一遍,还以为小何给她转了250.而这种错误就叫做脏读(读了未提交事务的数据)。

读提交(Read Committed):

​ 允许不可重复读取,但不允许脏读取。这可以通过“瞬间共享读锁”和“排他写锁”实现。读取数据的事务允许其他事务继续访问该行数据,但是未提交的写事务将会禁止其他事务访问该行。

举个例子:小美和小何拿着520的账户去逛街买衣服,小美选了一件500的衣服,支付前,小美的账户上面查看有520元,于是小美升出二维码支付,但是这个时候,学校在绑定的小美的账户上面扣除了300的书本费,并且提交了事务,小美的账户被更新成为了220元,小美这时被告知账上没有足够的前支付。但是小美很纳闷,我刚不是有钱的吗?这就是不可重复读(同一个事务两次读取的内容不一样,读取无法重复)

可重复读取(Repeatable Read):

禁止不可重复读取和脏读取,但是有时可能出现幻读数据。这可以通过**“共享读锁”“排他写锁”实现。读取数据的事务将会禁止写事务**(但允许读事务),写事务则禁止任何其他事务。

可重复读比较简单,就是在小美结账时不让其他的UPDATE操作动她的账户,当学校的扣费事务到来时拒绝掉,这个时候你就可以重复读取到相同的账户金额,并且付款成功。但是这种情况可能出现幻读的情况,其实本质原因是因为可重复读只能解决其他的UPDATE事务,对于INSERT操作无能为力。那幻读又是什么?

举个例子:小美被告知账上没钱时,比较惊讶,于是她来到了学校教务处查询自己账户记录。(小美事务开启)小红看到自己的账户上面时被扣了300元书本费,还剩下220元,于是小红提出让老师打印自己的账户记录回家报销,但是在这个时候,好男人小何怕小美伤心又给小美转账了300元,并且完成了事务,提交了小何事务。于是在打印的账户记录出现了300的入账记录,小美十分开心,对着小何说:"我是不是出现了幻觉,刚刚不是只有220元的吗?怎么多了300元?",小何此时深藏功与名,而这个就叫做幻读

序列化(Serializable):

提供严格的事务隔离。它要求事务序列化执行,事务只能一个接着一个地执行,不能并发执行。仅仅通过“行级锁”是无法实现事务序列化的,必须通过其他机制保证新插入的数据不会被刚执行查询操作的事务访问到。

序列化就是按部就班的执行,可以避免脏读、不可重复读与幻读,但是可想而知,这种方式会降低数据库的效率。


希望对你有帮助!

近期文章
四大函数式接口演示代码——>通俗易懂
单例模式和双重检测锁模式下的相关问题
Springboot-Aop基于正则表达式和注解实现
SpringBoot整合Redis及简单使用
Docker安装Mysql以及Mysql的基本操作——入门必看
vue-cli十分钟学习入门笔记――开袋即食
如何判断2的n次方?用四种方式来扒一扒。
关于SpringAOP的三种实现方式你有了解过吗?
八皇后问题详细另类图解-九张图带你了解什么是八皇后问题

http://www.niftyadmin.cn/n/1758201.html

相关文章

CentOS7精简版基本配置

CentOS7精简版基本配置 文章目录CentOS7精简版基本配置一,CentOS7下载及环境准备二,静态IP配置三,启动虚拟机四,安装基本工具命令五,总结一,CentOS7下载及环境准备 阿里云镜像下载地址,使用CentOS-7-x86_6…

Java后端开发必备软件下载地址汇总

Java后端开发必备软件下载地址汇总 文章目录Java后端开发必备软件下载地址汇总先记录,用到再加,持续更新,欢迎补充。华为云jdk8OpenJdk小版本IDEA各版本Tomcat各版本Maven各版本Mysql各版本Node.js各版本GitTyporaPostmanCode::Blocks7-zipno…

返回列表的最大值下标_python入门到精通教程06-一文轻松搞懂python列表

列表定义使用中括号[],里面的值可以为任意类型list1 [hello,123,99.99,False]列表特点有序:下标索引元素可修改值可重复列表值访问list[index]:索引从0开始,不能越界list[0]访问第一个值列表新增list.append(value):数组列表末尾新增list.insert(index,…

wdr7300千兆版和百兆版区别_功能更强大 首发享折扣!网易UU加速器推出千兆版UU加速盒...

随着时代的变化,主机游戏已被更多游戏爱好者认可,主机用户数量在逐渐增加。在传统的单机玩法之外,主机游戏的联机玩法,能让玩家们获得更刺激、更有趣的游戏体验。但碍于大部分主机游戏只有外服,国内玩家在联机时&#…

智伴机器人自动关机后怎么开机_智伴儿童机器人:宝妈篇

每一位宝妈身边都有一群宝妈,所以今天这个视频《智伴儿童机器人:宝妈篇》很合适宝妈群体详细了解,宝妈群体的庞大,让宝妈身边资源充分利用,更多的宝妈一起创业,解决育儿问题与陪伴孩子的教育问题&#xff0…

rules不显示 vue_iclient在vue中显示不出地图

使用产品:iclient classic 8.1.1在vue中地图数据似乎传回来了,但是并不会再次向服务器请求图片。Vue的代码如下export default {mounted() {let url "http://support.supermap.com.cn:8090/iserver/services/map-world/rest/maps/World";//初…

o oia ospf 路由优先_华为Ospf的路由引入(import)

华为Ospf的路由引入(import)思科里称为路由重分布(重分发) 注意:不通的路由协议之间默认不能直接传递路由,若想传递还需要引入路由1.ospf rip双向引入网络中有OSPF也有RIP,为了让2个路由协议可以通信我们就要引入路由才能使2个路由协议通信。…

巴伦变压器电路图_巴伦的功能原理_性能参数_基本类型介绍

巴伦(英语为balun)为一种三端口器件,或者说是一种通过将匹配输入转换为差分输出而实现平衡传输线电路与不平衡传输线电路之间的连接的宽带射频传输线变压器。巴伦的功能在于使系统具有不同阻抗或与差分/单端信令兼容,并且用于手机和数据传输网络等现代通…