MySQL事务隔离级别

MySQL事务隔离级别

事务

事务是由单独的一个或者多个SQL语句组成,是一个最小的不可再分割的单元,这一组操作里面的所有的执行,要么全部成功、要么全部不成功。如果有一个执行不成功,则全部进行回滚。
例如: 去银行转账,用户用A账户转100元到B账户,首先A账户需要扣减100元,B账户需要增加100元,这两个操作必须都要全部成功完成,如果有其中一个操作出现失败,例如A账户扣减完100,B账户增加100元时出现错误,则A账户增加的100也要回滚,否则就会导致金额不对。事务就是保证这两个操作要么都成功,要么都不成功。

事务的并发问题

脏读

MySQL事务隔离级别

事务A读取到了事务B已经修改还未提交的数据,此时如果事务B回滚,则事务A读取到的数据就是无效的,这种数据就是”脏数据”,事务A根据这个数据进行操作可能就会出现错误。

不可重复读

MySQL事务隔离级别

事务A读取某一个字段时,事务B对该字段进行了修改,事务A再次读取该字段时,读取到的值和第一次读取到的值不一致。

幻读

MySQL事务隔离级别

事务A查询表中数据,事务B新增了数据到该表中,事务A再次查询表中数据,两次查询结果不一致。
不可重复读和幻读的区别:不可重复读针对的是修改,幻读针对的是新增或删除。
不可重复读指的是两次读取过来的数据内容不一样,幻读指的是两次读取过来的数据条数不一样。

串行化

事务A和事务B同时操作数据时,如果事务A修改了数据,没有提交数据时,事务B想增加、修改、删除数据,都必须等待事务A提交,事务B才能执行。

事务的隔离级别

读取未提交(Read Uncommitted)

允许事务读取到其他事务未提交的数据。事务A可以读取到事务B修改但是未提交的数据。隔离级别最低,上面出现的并发问题都没解决。

读取已提交(Read Committed)(Oracle默认)

事务只能看到其他事务已经提交的数据。事务A只能读取事务B已经提交的数据。可以避免脏读,但是不可以避免不可重复读和幻读。

可重复读(Repeatable Read)(MySQL默认)

事务多次读取时可以保证读取到相同的值,在事务期间,禁止其他事务对该数据进行更新操作。事务A读取某商品数量100,在此期间禁止事务B更新该商品数量,事务A再次读取该商品数量还是100.可以避免脏读和不可重复读,但是无法避免幻读。

可串行化(Serializable)

保证事务读取到相同的数据,在事务期间,禁止其他事务对该表进行新增、更新、删除操作。

Original: https://www.cnblogs.com/aibianchengya/p/16696618.html
Author: 程序猿的代码
Title: MySQL事务隔离级别

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/577832/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 机器学习导引

    三种范式 常常定义一种损失函数,对训练集进行处理时使其最小化。该函数代表了系统输出对于正确输出的错误率,因为训练集的给定的输出是正确的 学习数值型预测函数,比如房价预测模型 在训练…

    Linux 2023年6月7日
    075
  • 日常开发方案设计指北

    互联网公司管理研发流程,常常使用TAPD一类的敏捷工具。一个需求从提出到上线要经历至少七个流程: 1)需求评审:产品经理给出需求文档,邀请技术参与需求评审,目的是扫清需求疑点,排除…

    Linux 2023年6月6日
    0116
  • 《拉钩课程 – 重学操作系统 – Linux 指令入门》

    1、进程是什么?进程是应用的执行副本。应用的可执行文件是放在文件系统里,把可执行文件启动,就会在操作系统里(具体来说是内存中)形成一个应用的副本,这个副本就是进程。 2、Linux…

    Linux 2023年5月27日
    0116
  • redis 学习指南

    2、 redis.windows.conf各项配置参数介绍 默认情况下,redis不是在后台模式运行的,如果需要在后台进程运行,把该项的值更改为yes,默认为no daemoniz…

    Linux 2023年5月28日
    097
  • Python eval()函数

    The eval() takes three parameters: expression – this string as parsed and evaluated …

    Linux 2023年6月8日
    0105
  • 自己写的文件夹图标修改脚本

    自己写了一个文件图标修改的Python脚本,只要把文件夹拖动到这个脚本上,就可以用文件夹中的图片和视频作为文件夹的封面。把图片或视频拖到脚本上,就可以把这个图片或视频用作其所在文件…

    Linux 2023年6月6日
    0168
  • 前端基础之JavaScript(一)

    一、JavaScript概述 1.1 ECMAScript和JavaScript的关系 1996年11月,JavaScript的创造者–Netscape公司,决定将Ja…

    Linux 2023年6月14日
    0116
  • Redis中bitmap的妙用

    bitmap的使用场景使用场景一:用户签到使用场景二:统计活跃用户使用场景三:用户在线状态 Original: https://www.cnblogs.com/linjiqin/p…

    Linux 2023年5月28日
    0107
  • 微信小程序开发(1)

    微信小程序开发(1) 微信小程序开发(1) 代码结构与基本配置 代码结构与基本配置 基本HelloWorld创建 开发框架——基本构成 微信开发者工具 版本控制 WXML wxml…

    Linux 2023年6月8日
    0111
  • 软件危机复习

    没有银弹的含义 软件危机:由于软件规模越来越大,软件复杂性越来越高,可靠性问题也越来越突出,传统的个人设计,个人实现的方式不再满足要求,迫切需要改变软件生产方式,提高软件开发效率,…

    Linux 2023年6月8日
    098
  • docker容器编排原来这么丝滑~

    前言: 请各大网友尊重本人原创知识分享,谨记本人博客:南国以南i 概念介绍: Docker 这个东西所扮演的角色,容易理解,它是一个容器引擎,也就是说实际上我们的容器最终是由Doc…

    Linux 2023年6月14日
    0108
  • 冯·诺依曼体系结构

    cpu运算速度>寄存器速度>L1~L3Cache>内存>外设(磁盘)>光盘 外设(输入设备、输出设备)不和cpu直接数据交换 cpu直接和内存数据交换…

    Linux 2023年6月13日
    0105
  • linux 上进程被随机kill掉,如何监测和查询;谁杀了我的进程;Who sends a SIGKILL to my process mysteriously on ubuntu server

    今天跑实验,发现进程被随机kill。咨询了服务器上的其他同学,他们说之前也发生过,一直存在。看来可能有可能不是我自己程序的原因,只能自己动手解决了。 在 Who sends a S…

    Linux 2023年6月14日
    0116
  • Linux下TIME_WAIT连接优化内核参数tcp_tw_reuse与tcp_tw_recycle区别与联系浅析

    概述 最近学习网络相关知识点,很多文章提到针对TCP time wait(后续简称TW)状态连接进行优化的参数tcp_tw_reuse和tcp_tw_recycle,并且不少文章提…

    Linux 2023年6月6日
    0130
  • USB_ModeSwitch for Android 7

    测试步骤: 2.运行命令 adb shell usbmodeswitch -W -v 12d1 -p 1f01 -M ‘555342431234567800000000…

    Linux 2023年6月7日
    082
  • 005 Linux 命令三剑客之-sed

    grep:数据查找定位 awk:数据切片,数据格式化,功能最复杂 *sed:数据修改 三剑客各有所长,就从锅碗瓢盆一一开始吧! [En] The three swordsmen h…

    Linux 2023年5月27日
    0114
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球