文章目录

  • 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、事务隔离级别

隔离级别自上而下级别越来越高,性能越来越低,隔离级别分别是:

  1. 读未提交:一个事务还没提交时,它做的变更就能被别的事务看到。
  2. 读已提交:一个事务提交之后,它做的变更才会被其他事务看到。
  3. 可重复读(默认):一个事务执行过程中看到的数据,总是跟这个事务在启动时看到的数据是一致的。当然在可重复读隔离级别下,未提交变更对其他事务也是不可见的。
  4. 串行化:“写”会加“写锁”,“读”会加“读锁”。当出现读写锁冲突的时候,后访问的事务必须等前一个事务执行完成,才能继续执行。

隔离级别常见操作:

# 查看事务隔离级别
SELECT @@TRANSACTION_ISOLATION;
# 设置事务隔离级别 SESSION:当前会话
SET [ SESSION | GLOBAL ] TRANSACTION ISOLATION LEVEL { READ UNCOMMITTED | READ COMMITTED | REPEATABLE READ | SERIALIZABLE }

设置好对应的隔离级别就不会出现并发事务带来的各种问题

4、总结

并发事务问题与事务隔离级别相关推荐

  1. mysql隔离级别 简书_数据库事务和四种隔离级别

    什么是事务 事务(Transaction):访问并可能更新数据库中各种数据项的一个程序执行单元(unit),它通常由高级数据库操纵语言或编程语言(如SQL,C++或Java)书写的用户程序的执行所引起 ...

  2. mysql事务传播属性_Spring事务传播属性和隔离级别详细介绍

    1 事务的传播属性(Propagation) 1) REQUIRED ,这个是默认的属性 Support a current transaction, create a new one if none ...

  3. Spring事务传播属性和隔离级别

    Spring事务传播属性和隔离级别 一.Spring事务传播属性(Propagation): 1) REQUIRED(默认属性) 如果存在一个事务,则支持当前事务.如果没有事务则开启一个新的事务.  ...

  4. oracle事务重要属性,Oracle中的事务(2)--属性和隔离级别

    事务的属性 1.只读属性(read only) 只读事务,只执行查询操作,而不允许执行DML(增.删.改)操作,使用只读事务,可以让用户只取到某个时间点的数据. 假如有一个机票代售点,有一个管理员想在 ...

  5. spring 事务隔离级别和传播行为_Java工程师面试1000题146-Spring数据库事务传播属性和隔离级别...

    146.简介一下Spring支持的数据库事务传播属性和隔离级别 介绍Spring所支持的事务和传播属性之前,我们先了解一下SpringBean的作用域,与此题无关,仅做一下简单记录. 在Spring中 ...

  6. 数据库事务的四个隔离级别

    [3]事务的四个隔离级别.   事务隔离级别                     脏读       不可重复读        幻读         READ_UNCOMMITTED       允 ...

  7. spring事务和mysql的隔离级别

    mysql事务.mysql隔离级别.mysql锁.mysql数据一致性.Spring事务.Spring事务传播性之间的关系 一直有些模糊,整理一下. mysql事务: 在mysql中,只有使用了Inn ...

  8. MySQL事务的4种隔离级别

    文章目录 1 简介 2 什么是数据库事务? 2.1 事务的四大特性(ACID) 3 并发事务会导致的问题 3.1 本文会使用到的 SQL 语句: 3.1.1 示例表结构 3.1.2 查询事务的默认隔离 ...

  9. 数据库事务的ACID及隔离级别

    文章目录 ACID 概念 四大特性 并发控制 隔离级别 串行化 可重复读 提交读 未提交读 默认隔离级别 读现象举例 脏读 不可重复读 幻读 隔离级别 VS 读现象 隔离级别 VS 锁持续时间 ACI ...

  10. 事务的4种隔离级别(Isolation Level)分别是什么?

    事务的4种隔离级别(Isolation Level)分别是什么? 当多个线程都开启事务操作数据库中的数据时,数据库系统要能进行隔离操作,以保证各个线程获取数据的准确性, 所以, 对于不同的事务,采用不 ...

最新文章

  1. pyhton re模块
  2. 导出EXCEL中的文件到资源管理器
  3. 在github上托管Maven存储库(包含源代码和javadoc)
  4. [usaco2004][bzoj3379] 交作业
  5. 慕学在线网0.4_xadmin后台管理
  6. c语言中- gt he,C语言中deta,fabs,lt;stdlib.hgt;,lt;stdio.hgt;分别是什么意思
  7. linux红帽6架设apache,linux Redhat6.5 中 编译安装apache
  8. 实现手机版和电脑端显示不同的广告代码
  9. final 最终 演练 java
  10. mysql 服务器 utf8_MySQL编码设置方法 MySQL编码为utf8设置方法
  11. mysql 存储过程代码_mysql存储过程语法与实例
  12. 《UNIX网络编程 卷1:套接字联网API(第3版)》——2.13 常见因特网应用的协议使用...
  13. 算法第四版 练习答案 1.4.1
  14. 服务过载保护设计与实施
  15. 工行u盾显示316_工行手机银行u盾签名失败或未完成(310)是为什么?
  16. Tomcat下载安装及配置Https教程
  17. 程序员有哪些类型,分别薪资是多少,带你一起走进程序员的大门
  18. 火车头免登录php代码,福利|火车采集器免登陆发布接口集合
  19. GIC Partitioning
  20. 最新2019版个税计算器(5000起征点 + 个税专项扣除项)

热门文章

  1. MongoDB元数据的存储介绍
  2. ORBBEC(奥比中光)AstraPro相机在ROS2下的标定与D2C(标定与配准)
  3. 成为Flutter动画大师(三)
  4. Svm算法原理简单梳理
  5. centos备份mysql数据库
  6. 卡特加特“飞碟”万能红外遥控器,一个控全屋所有家电!支持语音遥控定时手机,传统家电变智能
  7. VoLTE:别把Cancel与BYE搞混了!
  8. 蓝牙耳机哪个品牌最好?目前最值得入手性价比高的无线蓝牙耳机
  9. Android使用Retrofit技术仿微信图片上传,可以选择多张图片拍照上传
  10. 定制仿淘鲜达/盒马鲜生微信小程序系统