并发事务问题与事务隔离级别
文章目录
- 1、什么是事务
- 2、并发事务所遇到的问题
- 2.1、脏读
- 2.2、不可重复读
- 2.3、幻读
- 3、事务隔离级别
- 4、总结
该技术博客根据B站黑马MySQL教程做的笔记总结
希望能为大家带来帮助!感谢你的三连
1、什么是事务
学习并发事务之前,需要理解什么是事务:
事务:一组操作的集合,它是一个不可分割的工作单位,事务会把所有的操作作为一个整体一起向系统提交或撤销操作请求,即这些操作要么同时成功,要么同时失败。
例如转账案例,A账户给B账户转账1000元,那么A账户就会失去1000元,B账户增加1000元,那么这两步操作必须要同时成功或同时失败才符合业务需求,不能出现A账户损失1000,结果B账户却没有增加1000,这就非常离谱!所以事务是非常重要的
事务四大特性(ACID):
- 原子性(Atomicity):事务是不可分割的最小操作单元,要么全部成功,要么全部失败。
- 一致性(Consistency):事务完成时,必须使所有的数据都保持一致状态。
- 隔离性(Isolation):数据库系统提供的隔离机制,保证事务在不受外部并发操作影响的独立 环境下运行。
- 持久性(Durability):事务一旦提交或回滚,它对数据库中的数据的改变就是永久的。
2、并发事务所遇到的问题
2.1、脏读
事务B查询DB时,读取到事务A修改修改后的数据,但是事务A并没有提交事务
2.2、不可重复读
事务A读取DB后得到数据,然后事务B把数据修改后提交,最终事务A再次读取数据发现数据发生了变化!
2.3、幻读
当我们已经解决不可重复读问题后,事务A查询数据,发现并没有数据,紧接着事务B插入一条数据,事务A由于没查到数据,就要插入数据,结果由于主键冲突而失败,因为事务B已经插入数据了,最终事务A再次查询结果还是查询不到(解释:本来事务A就不该读到事务B插入的结果,如果能读到那就是2.2不可重复读问题了)
为了解决并发事务所引发的问题,在数据库中引入了事务隔离级别。
3、事务隔离级别
隔离级别自上而下级别越来越高,性能越来越低,隔离级别分别是:
- 读未提交:一个事务还没提交时,它做的变更就能被别的事务看到。
- 读已提交:一个事务提交之后,它做的变更才会被其他事务看到。
- 可重复读(默认):一个事务执行过程中看到的数据,总是跟这个事务在启动时看到的数据是一致的。当然在可重复读隔离级别下,未提交变更对其他事务也是不可见的。
- 串行化:“写”会加“写锁”,“读”会加“读锁”。当出现读写锁冲突的时候,后访问的事务必须等前一个事务执行完成,才能继续执行。
隔离级别常见操作:
# 查看事务隔离级别
SELECT @@TRANSACTION_ISOLATION;
# 设置事务隔离级别 SESSION:当前会话
SET [ SESSION | GLOBAL ] TRANSACTION ISOLATION LEVEL { READ UNCOMMITTED | READ COMMITTED | REPEATABLE READ | SERIALIZABLE }
设置好对应的隔离级别就不会出现并发事务带来的各种问题!
4、总结
并发事务问题与事务隔离级别相关推荐
- mysql隔离级别 简书_数据库事务和四种隔离级别
什么是事务 事务(Transaction):访问并可能更新数据库中各种数据项的一个程序执行单元(unit),它通常由高级数据库操纵语言或编程语言(如SQL,C++或Java)书写的用户程序的执行所引起 ...
- mysql事务传播属性_Spring事务传播属性和隔离级别详细介绍
1 事务的传播属性(Propagation) 1) REQUIRED ,这个是默认的属性 Support a current transaction, create a new one if none ...
- Spring事务传播属性和隔离级别
Spring事务传播属性和隔离级别 一.Spring事务传播属性(Propagation): 1) REQUIRED(默认属性) 如果存在一个事务,则支持当前事务.如果没有事务则开启一个新的事务. ...
- oracle事务重要属性,Oracle中的事务(2)--属性和隔离级别
事务的属性 1.只读属性(read only) 只读事务,只执行查询操作,而不允许执行DML(增.删.改)操作,使用只读事务,可以让用户只取到某个时间点的数据. 假如有一个机票代售点,有一个管理员想在 ...
- spring 事务隔离级别和传播行为_Java工程师面试1000题146-Spring数据库事务传播属性和隔离级别...
146.简介一下Spring支持的数据库事务传播属性和隔离级别 介绍Spring所支持的事务和传播属性之前,我们先了解一下SpringBean的作用域,与此题无关,仅做一下简单记录. 在Spring中 ...
- 数据库事务的四个隔离级别
[3]事务的四个隔离级别. 事务隔离级别 脏读 不可重复读 幻读 READ_UNCOMMITTED 允 ...
- spring事务和mysql的隔离级别
mysql事务.mysql隔离级别.mysql锁.mysql数据一致性.Spring事务.Spring事务传播性之间的关系 一直有些模糊,整理一下. mysql事务: 在mysql中,只有使用了Inn ...
- MySQL事务的4种隔离级别
文章目录 1 简介 2 什么是数据库事务? 2.1 事务的四大特性(ACID) 3 并发事务会导致的问题 3.1 本文会使用到的 SQL 语句: 3.1.1 示例表结构 3.1.2 查询事务的默认隔离 ...
- 数据库事务的ACID及隔离级别
文章目录 ACID 概念 四大特性 并发控制 隔离级别 串行化 可重复读 提交读 未提交读 默认隔离级别 读现象举例 脏读 不可重复读 幻读 隔离级别 VS 读现象 隔离级别 VS 锁持续时间 ACI ...
- 事务的4种隔离级别(Isolation Level)分别是什么?
事务的4种隔离级别(Isolation Level)分别是什么? 当多个线程都开启事务操作数据库中的数据时,数据库系统要能进行隔离操作,以保证各个线程获取数据的准确性, 所以, 对于不同的事务,采用不 ...
最新文章
- pyhton re模块
- 导出EXCEL中的文件到资源管理器
- 在github上托管Maven存储库(包含源代码和javadoc)
- [usaco2004][bzoj3379] 交作业
- 慕学在线网0.4_xadmin后台管理
- c语言中- gt he,C语言中deta,fabs,lt;stdlib.hgt;,lt;stdio.hgt;分别是什么意思
- linux红帽6架设apache,linux Redhat6.5 中 编译安装apache
- 实现手机版和电脑端显示不同的广告代码
- final 最终 演练 java
- mysql 服务器 utf8_MySQL编码设置方法 MySQL编码为utf8设置方法
- mysql 存储过程代码_mysql存储过程语法与实例
- 《UNIX网络编程 卷1:套接字联网API(第3版)》——2.13 常见因特网应用的协议使用...
- 算法第四版 练习答案 1.4.1
- 服务过载保护设计与实施
- 工行u盾显示316_工行手机银行u盾签名失败或未完成(310)是为什么?
- Tomcat下载安装及配置Https教程
- 程序员有哪些类型,分别薪资是多少,带你一起走进程序员的大门
- 火车头免登录php代码,福利|火车采集器免登陆发布接口集合
- GIC Partitioning
- 最新2019版个税计算器(5000起征点 + 个税专项扣除项)
热门文章
- MongoDB元数据的存储介绍
- ORBBEC(奥比中光)AstraPro相机在ROS2下的标定与D2C(标定与配准)
- 成为Flutter动画大师(三)
- Svm算法原理简单梳理
- centos备份mysql数据库
- 卡特加特“飞碟”万能红外遥控器,一个控全屋所有家电!支持语音遥控定时手机,传统家电变智能
- VoLTE:别把Cancel与BYE搞混了!
- 蓝牙耳机哪个品牌最好?目前最值得入手性价比高的无线蓝牙耳机
- Android使用Retrofit技术仿微信图片上传,可以选择多张图片拍照上传
- 定制仿淘鲜达/盒马鲜生微信小程序系统