事务的隔离级别和对应的问题

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
简介: 事务的隔离级别和对应的问题

公众号merlinsea


事务的隔离级别



   事务具有原子性,一致性,隔离性,持久性四大特性。其中隔离性是指mysql如果同时开启多个事务,不同的事务之间相互影响的程度却是有不同的等级的。


事务隔离级别:


read uncommitted(读取未提交数据):即便是事务没有commit,但是其他连接仍然能读到未提交的数据,这是所有隔离级别中最低 的⼀种。

read committed(可以读取其他事务提交的数据):当前会话只能读取到其他事务提交的数据,未提交的数据读不到。 

repeatable read(可重读)---MySQL默认的隔离级别:当前会话可以重复读,就是每次读取的结果集都相同,⽽不管其他事务有没有 提交。

serializable(串⾏化):其他会话对该表的写操作将被挂起。可以看到,这是隔离级别中最严格的,但是这样做势必对性能造成影响。


mysql中设置事务隔离级别语句


set global transaction isolation level read uncommitted;


read uncommitted隔离级别

640.jpg


read committed隔离级别

640.jpg


repeatable read隔离级别

640.jpg


由于mysql中设置的隔离级别的不同,导致的问题有脏读,幻读,不可重复读。


  • 脏读,幻读,不可重复读


问题简介


   根据数据库的不同的隔离级别,会导致事务产生不同的现象,脏读,幻读,不可重复读就分别用于描述这些现象。

   脏读:在读未提交的隔离级别下,事务2可能读取到事务1还没有提交的数据,但事务1最终可能是rollback回滚数据,导致事务2读取到的是事务1的脏数据。脏读只会出现在【读未提交】的隔离级别下。

   幻读:事务2中先后读取某一个范围的数据时,事务1中途可能向这个范围中插入了一条数据,导致事务2先后两次读取这个范围的数据记录数量不一致的情况出现,即出现所谓的幻影行。幻读会出现在【读未提交】,【读已提交】,【可重复读】的隔离级别中。

   不可重复读:事务2中先后读取某一条记录时,事务1中途可能修改了这条记录,导致事务2中先后读取这条记录出现不一致的情况。不可重复读出现在【读未提交】和【读已提交】的隔离级别中。


为什么repeatable read的隔离级别下仍存在幻读问题?


   repeatable read的隔离级别的幻读只出现在更新操作中,在读取操作的时候是不会出现幻读的。因为mysql的可重复读的机制是在开启事务的时候就会生成一个快照表,所有的读取操作都是基于这个快照表来操作,但是更新操作是基于原表进行操作的,因此会导致在可重复读读隔离级别下更新操作可能出现幻读。

640.jpg


关于leetcode算法训练营:

   加我微信号私聊参加训练营~

本人用c++刷了800道左右的算法,java语言刷了600道左右的算法题,并对这些题做了详细的个人总结。本科期间系统学习了数据结构与算法课程,同时考研过程中写完了率辉主编的《2020年数据结构高分笔记》和《数据结构1000题》,看完的视频包括《mooc浙大数据结构国家精品课程》和《王道考研408数据结构课程》,《王道2019年算法题讲解视频》,最终以初试专业第三名进入了北理工软件工程专业。熟悉并掌握常见的数据结构,比如链表、数组、树、图、队列、堆栈等等,精通数据结构教材中的所有算法,比如常见的遍历算法、动态规划,递归,回溯,剪枝,并查集,最短路径,拓扑排序等等,所以快加入训练营吧,我们一起进步

奔跑的小梁,公众号:梁霖编程工具库算法训练营,快来参加


相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
3月前
|
SQL 关系型数据库 MySQL
事务及事务的隔离级别
事务及事务的隔离级别
|
4月前
|
SQL 关系型数据库 MySQL
对数据库事务理解以及脏读、不可重复读以及幻读问题
对数据库事务理解以及脏读、不可重复读以及幻读问题
|
4月前
|
SQL
事务的隔离级别
事务的隔离级别 多个事务之间隔离的,相互独立的。但是如果多个事务操作同一批数据,则会引发一些问题。设置不同隔离级别就可以解决 1.脏读:一个事务,读取到另一个事务中没有提交的数据 2.不可重复读,在同一个事务中,两次读取的数据不一样 3.幻读:(dml)一个事务操作数据表中记录,另一个事务添加了一条数据,则第一个事务查询不到自己的修改 隔离级别 1.read uncommitted:读未提交 产生问题:脏读、不可重复读、幻读 2.read committed:读已提交 产生问题:不可重复读、幻读 3.repeatable read:可重复读 产生问题:幻读 4.serializable:串行
23 0
|
4月前
|
供应链 数据库
|
6月前
|
机器学习/深度学习 算法 关系型数据库
数据库事务——事务隔离级别
数据库事务——事务隔离级别
|
9月前
|
数据库
数据库事务的并发问题 (脏读、幻读、不可重复读)
数据库事务的并发问题 (脏读、幻读、不可重复读)
77 0
|
10月前
|
存储 SQL 安全
事务ACID与隔离级别
事务ACID与隔离级别
70 0
|
11月前
|
SQL Oracle 关系型数据库
数据库事务隔离级别
数据库事务隔离级别
98 0
|
SQL 关系型数据库 MySQL
事务隔离级别
事务隔离级别
事务隔离级别
|
SQL Oracle 关系型数据库
【事务隔离级别】
【事务隔离级别】
【事务隔离级别】