当前位置:网站首页>[Mysql]--事务、事务的隔离级别、脏读、不可重复读、幻读解析
[Mysql]--事务、事务的隔离级别、脏读、不可重复读、幻读解析
2022-08-09 14:51:00 【Ran959】
啦啦啦,今天我们来酱一下事务~
如果喜欢我,就赞赞我~
什么是事务?
数据库中的事务是对 数据库执行的一批操作
在同一个事务当中,这些操作要么全部执行,要么全部失败。
a.事务是一个原子操作。是一个最小的执行单元。(可以由一个或多个SQL语句组成)
b. 在同一个事务中,所有的语句都成功执行,整个事务成功。
有一个事务失败,整个事务都执行失败。
限制:mysql数据库中仅InnoDB 和 BDB类型的数据库表 支持事务。
事务的特性/原则(ACID)
原子性(Atomicity):
整个事务的过程如原子操作一样,要么全部成功,要么全部失败。
这个原子性是从最终结果来看的,从最终结果来看这个过程是不可分割的。
一致性(Consist):
在事务开始之前和事务结束以后,数据库的完整性没有被破坏。
就比如一个人给另一个人转账,一个钱已经扣了,另一个却没收到,这就不一致。
隔离性(Isolated):
事务的执行是互不干扰的,一个事务不可能看到其他事务运行时,其中间某一时刻的数据。
数据库允许多个并发事务同时对其数据进行读写和修改的能力,隔离性可以防止多个事务并发执行时由于交叉执行而导致数据的不一致。
事务隔离性分为:读未提交(Read uncommitted)、读已提交(Read committed)、可重复读(Readpeatble read)、串行化(Serialzable)
持久性(Durability):
一个事务一旦提交,他对数据库中数据的改变是永久性的。
意味着在事务完成后,该事务所对数据库所做的更改便持久的保存在数据库之中,并不会被回滚。
事务的隔离级别
InnoDB默认隔离级别为可重复读
读未提交(Read uncommitted):
简单点说:所有事务都可以看到没有提交事务的数据。
并发会出现的情况:脏读,不可重复读,幻读。
读已提交(Read committed):
事务提交成功之后才可以被看到。
并发会出现的情况:不可重复读,幻读。
可重复读(Readpeatble read):
同一个事务内多次查询都返回了不同的数据。
并发会出现的情况: 幻读。
可串行化(Serialzable):
强制的进行排序,在每个读数据的行上添加共享锁。花费最高代价但是最可靠的事务隔离级别。
并发会出现的情况:会导致大量的超时现象和锁竞争。
不同的隔离级别导致的问题:
脏读(Dirty read):
一个事务正在访问数据,并且进行了修改,但还没提交时,另一个事务也访问了这个数据并且使用了,这就造成了脏读。
总结:就是读了未修改完的记录。
不可重复读(Unrepeatableread):
指在一个事务内,多次读了同一个数据,在还没结束时,另一个事务也访问了这个数据,那么第一次事务在读两次数据之间,由于第三个事务的更改,第一个事务读了两次还不一样。
总结:因为被别人修改了,导致自己读了两次都不一样。
幻读(Phantom read):
一个在修改,一个在增删。第一个人就感觉自己出现了幻觉,数据咋不停变。
总结:其他人对表做了增删,自己读取修改不一致。
各位看官看完点个赞求求了~~
边栏推荐
猜你喜欢
随机推荐
相似图像的检测方法
A wave of Versailles: assault by the ali interview guide, I've got nine of the Offer
【Qt5 + OpenGL】glPointSize(10); error: undefined reference to `__imp_glPointSize‘
卷积神经网络表征可视化研究综述(1)
My MySQL database was attacked and deleted for ransom, forcing me to use all my might to recover data
VMWare不使用简易安装,手动安装ISO操作手册
6大论坛,30+技术干货议题,2022首届阿里巴巴开源开放周来了!
[Serilog] Simple .NET logging with fully structured events
经典面试题 之 TCP 三次握手/ 四次挥手
xshell7连接工具下载
shell------常用小工具,sort,uniq,tr,cut
优化软件测试成本的 7 个步骤
.NET现代应用的产品设计 - DDD实践
vivo手机上的系统级消息推送平台的架构设计实践
ArcGIS在国土空间·城乡规划中的实战应用
[DevOps] jekins configuration (2)
百度地图——地图找房功能
Docker安装MySQL详细步骤
Redis 面试题
【DevOps】jekinsBuild step 'Execute shell' marked build as failure









