数据库四种事务隔离级别详解
四种数据库隔离级别及解决的数据问题如下所示:
1.READ-UNCOMMITTED(读取未提交内容)
由于在该隔离级别下即使事务未提交所做的修改也会对其他事务产生影响。所以该级别会出现数据脏读的发生。
脏读:一个事务读取了另一个未提交的并行事务写的数据。
锁情况:事务在读取数据的时候并未对数据加锁。在修改数据的时候只对数据增加行级共享锁(其他事务可以读取但是不可以更新)。因此,事务在读取数据的时候会读取到其他事务未提交的数据产生脏读。
问题举例:老板给员工发工资,老板开启事务,然后想员工的账户转钱10000元,事务暂不提交。此时员工开启事务,查看账户余额发现多了10000元,然后提交事务。但是老板发现转多了,于是修改为转5000元,然后提交事务。最终员工账户多5000元而不是10000元,所以之前员工看到的10000元是脏数据。
2. READ-COMMITTED(读取提交内容)
在该隔离级别下事务没有提交是不会对其他事务产生影响的,只有提交的事务才会影响其他事务。所以避免了读脏数据。但是该级别会出现两次读取数据库数据不一致的情况(不可重复读)。
不可重复读:同一个事务中重新读取前面读取过的数据,发现两次读取数据不一样(该数据已经被另一个已提交的事务修改过)。
锁情况:事务对当前被读取的数据加行级共享锁,一旦读完该行就立即释放该锁;事务在更新某数据的瞬间,必须先对数据增加行级排他锁(其他事务不可以对该数据进行任何操作),直到事务结束才释放。因此,事务在修改的工程中由于事务没有提交所以不会影响到其他事务,避免了脏读的发生。但是会出现不可重复读的情况。
问题举例:老板给员工发工资。员工开启事务,查看账户余额(此时对数据增加了行级共享锁),发现账户余额是0元,然后释放了该锁。发现老板尚未转钱。此时,老板开启事务,然后向员工的账户里面转钱一万元(事务对该数据增加了行级排他锁),在事务未提交之前员工是无法进行查看余额的操作。紧接着老板提交事务,在这之后员工可以进行查看操作。然后员工觉得不对劲又查看了一次(员工之前的事务尚未提交),发现现在余额是一万元。即员工在同一事务下两次相同查看操作得到的结果不一致。
3. REPEATABLE-READ(可重复读)
在该隔离级别下两个事务同时进行,其中一个事务修改数据不会对另一个事务造成影响,即使修改的事务已经提交也不会对另一个事务造成影响。因此,该隔离级别不会出现不可重复读的情况。但是,该级别下会出现幻读。
幻读:是指当事务不是独立执行时发生的一种现象,例如第一个事务对一个表中的数据进行了修改,这种修改涉及到表中的全部数据行。同时,第二个事务也修改这个表中的数据,这种修改是向表中插入一行新数据。那么,以后就会发生操作第一个事务的用户 发现表中还有没有修改的数据行,就好象发生了幻觉一样.
锁情况:事务在读取某数据的瞬间,必须先对其加行级共享锁,直到事务结束才释放;事务在更新某数据的瞬间,必须先对其加行级排他锁,直到事务结束才释放。因此,事务在读取数据的时候其他事务是可以对该数据进行读取操作,因此避免了不可重复读的情况。但是无法避免幻读的发生。
问题举例:目前分数为90分以上的的学生有15人,事务A开启,并读取所有分数为90分以上的的学生人数(事务对该数据增加了行级共享锁),发现有15人,暂不提交事务。此时,事务B开启,并插入一条分数为99的学生记录,然后提交事务。此时,事务A再次读取90分以上的的学生,发现记录为16人,多了一个人。此时产生了幻读。
4.SERIERLIZED(可串行化)
该事务隔离级别最严厉,在进行查询时就会对表加上共享锁,其他事务对该表将只能进行读操作,而不能进行写操作。
锁情况:事务在读取数据时,必须先对其加表级共享锁,直到事务结束才释放;事务在更新数据时,必须先对其加表级排他锁,直到事务结束才释放。因此,事务A在查询数据的时候就对该表增加了表级共享锁,其他事务只可以对该表进行查询操作直到事务A提交。所以避免了幻读的产生。
现象:事务1正在读取A表中的记录时,则事务2也能读取A表,但不能对A表做更新、新增、删除,直到事务1结束。(因为事务一对表增加了表级共享锁,其他事务只能增加共享锁读取数据,不能进行其他任何操作)
事务1正在更新A表中的记录时,则事务2不能读取A表的任意记录,更不可能对A表做更新、新增、删除,直到事务1结束。(事务一对表增加了表级排他锁,其他事务不能对表增加共享锁或排他锁,也就无法进行任何操作)
转载于:https://www.cnblogs.com/liuleicode/p/5796642.html
数据库四种事务隔离级别详解相关推荐
- MySQL 四种事务隔离级别详解及对比--转
http://www.jb51.net/article/100183.htm 接的隔离级别.它的语法如下: ? 1 SET [SESSION | GLOBAL] TRANSACTION ISOLATI ...
- mysql服务器级别角色_服务器数据库系列 - MySQL事务隔离级别详解
作者:xm_king SQL标准定义了4类隔离级别,包括了一些具体规则,用来限定事务内外的哪些改变是可见的,哪些是不可见的.低级别的隔离级一般支持更高的并发处理,并拥有更低的系统开销. Read Un ...
- Mysql有四种事务隔离级别,详解脏读、不可重复读、幻读
Mysql的事务隔离级别 Mysql有四种事务隔离级别,这四种隔离级别代表当存在多个事务并发冲突时,可能出现的脏读.不可重复读.幻读的问题. 脏读 大家看一下,我们有两个事务,一个是 Transact ...
- SQL Server事务隔离级别详解
SQL Server事务隔离级别详解 标签: SQL SEERVER/MSSQL SERVER/SQL/事务隔离级别选项/设置数据库事务级别 SQL 事务隔离级别 概述 隔离级别用于决定如果控制并发用 ...
- mysql四种事务隔离级别
mysql事务并发问题 ACID什么的就不啰嗦了.mysql多个事务并发的时候,可能会出现如下问题: 1. 更新丢失 即两个事务同时更新某一条数据,后执行的更新操作会覆盖先执行的更新操作,导致先执行的 ...
- mysql四种输入_mysql四种事务隔离级别
mysql事务并发问题 ACID什么的就不啰嗦了.mysql多个事务并发的时候,可能会出现如下问题: 1. 更新丢失 即两个事务同时更新某一条数据,后执行的更新操作会覆盖先执行的更新操作,导致先执行的 ...
- 【MySQL】MySQL的四种事务隔离级别
[MySQL]MySQL的四种事务隔离级别 本文实验的测试环境:Windows 10+cmd+MySQL5.6.36+InnoDB 一.事务的基本要素(ACID) 1.原子性(Atomicity):事 ...
- 数据库事务转载基础二:MySQL事务隔离级别详解
SQL标准定义了4类隔离级别,包括了一些具体规则,用来限定事务内外的哪些改变是可见的,哪些是不可见的.低级别的隔离级一般支持更高的并发处理,并拥有更低的系统开销. Read Uncommitted(读 ...
- MySQL事务隔离级别详解
SQL标准定义了4类隔离级别,包括了一些具体规则,用来限定事务内外的哪些改变是可见的,哪些是不可见的.低级别的隔离级一般支持更高的并发处理,并拥有更低的系统开销. Read Uncommitted(读 ...
最新文章
- IAR FOR ARM 各版本号,须要的大家能够收藏了
- 人工智能学什么?专家表示基础科学教育需发力
- 【Android UI设计与开发】3.引导界面(三)实现应用程序只启动一次引导界面
- LINUX IRC使用
- 工业交换机厂家有哪些?工业交换机十大品牌供应商!
- Python基础入门6_文件和异常
- go map详细使用方法
- 第 25 章 Build tool
- seaborn 绘图sns.relplot
- Vulkan学习(一):Vulkan环境搭建(Windows)官方教程--(Base code Instance Validation layers)
- 旅游四天,吃了一顿七千的饭,坐了一趟一万多的地铁,心疼肾更疼
- C. Alternating Sum(数论——等比数列公式与变换)
- Foxmail登录各种邮箱方法汇总
- 面试问遇到最难的事情_太难的事情
- vue动态更改背景图
- pipeline流水线及分布式流水线发布php项目
- Appium 按压元素进行滑动
- response.text和response.content
- 国产处理器服务器操作系统安装(海之舟服务器操作系统安装说明)
- mybatis实现一对多有几种方式_两件塑胶件连接,有哪几种方式实现?
热门文章
- 【机器视觉】 Halcon设置自动保存
- [Qt教程] 第30篇 XML(四)使用流读写XML
- 电子计算机信息工程都是做什么的,电子信息工程专业将来干什么 就业前景好不好...
- 母版页 中 html 乱码,Thymeleaf使用技巧:使用片段(fragment)实现母版页(Layout)功能...
- java amqp_AMQP协议
- java单行字符_十个便捷的单行代码编程技巧
- 计算机三级交换机允许中继配置,计算机三级交换机配置命令总结
- java密钥库文件存在但为空_java安全套接层SSL示例
- java stw_JVM STW里的no vm operation是怎么发生的
- 搜索二维矩阵 II—leetcode240