Mysql 事务的隔离性(隔离级别)
Mysql 中的事务分为手动提交和自动提交,默认是自动提交,所以我们在Mysql每输入一条语句,其实就会被封装成一个事务提交给Mysql服务端。
手动提交需要先输入begin,表示要开始处理事务,然后就是常见的sql语句操作了,操作完毕以后锁看到的都是临时处理结果,最后需要输入commit才会真正更新到磁盘。
目录
1、什么是事务
2、事务为什么要有隔离性?
3、隔离级别的分类
(1) 读未提交(Read Uncommitted)
(2) 读提交(Read Committed)
(3) 可重复读(Repeatable Read)
(4) 串行化(Serializable)
1、什么是事务
我们在火车站买票,买票和取票的过程可以看做是一个完整的过程(不可能买了票就走人)。但是站在售票员的角度,有人来买票以及取票需要做两个不同的动作(预定座位和发放纸质车票)
换到Mysql,我们作为用户,我们买到票以后取票,这就是一个事务;站在Mysql的角度,事务不过是多个sql语句的集合,第一条sql语句预定位置,第二条sql语句查询并打印车票。

2、事务为什么要有隔离性?
仍然以买票为例,不同售票窗口虽然服务的是不同用户,但是访问的是同一个数据库,一个窗口刚好在办理售票业务,即预定位置,但是此时突然另一个窗口也要预定位置,这两个并发的业务都要预定位置,但是位置只有一个,但是也不能让这两个业务同时成功。
因此,事务具有隔离性的原因是避免并发带来的不一致性,为防止两个事务相互影响,才有了四种隔离级别。

3、隔离级别的分类
Mysql 下的并发是不可避免的,不同的场景下对并发的接受程度也会不一样,比如买票就不允许两个人买到同一个座位,但如果是商店购物,两个人同时要来结账,依次处理结账事务是完全可以接受的。
依据不同的场景,Mysql允许不同程度的并发干扰,也就是隔离级别,Mysql 下的隔离级别有4种:
- 读未提交 【Read Uncommitted】
- 读提交 【Read Committed】
- 可重复读 【Repeatable Read】
- 串行化 【Serializable】
(1) 读未提交(Read Uncommitted)
意义:在该隔离级别下,可以看到其他事务尚未提交的执行结果。
存在的问题:这种情况下其他事务会受到临时执行结果的影响,如果线程B读取到线程A没有提交的事务,我们称之为“脏读”。这种级别相当于没有隔离性,因为线程A在提交事务之前随时都可以取消当前事务。

注意:一个事务在执行中,读到另一个执行中事务的更新(或其他操作)但是未commit的数据,这种现象叫做脏读
(2) 读提交(Read Committed)
意义:该隔离级别是大多数数据库的隔离级别(不是MySQL默认的)。一个事务可以读取到其他事务提交以后的结果(或者说事务处理结束的结果)
存在的问题:这种情况下存在一定的问题,比如事务线程B执行到某个 if 判断语句,其他事务把当前 if 语句的判断条件改变了,这就直接影响到了当前事务的逻辑判断。我们把这种情况称为“不可重复读”。

(3) 可重复读(Repeatable Read)
意义:MySQL默认的隔离等级,当前正在执行的事务无法看到其他事务的任何执行结果(无论是临时还是提交结果),直至当前事务提交(执行结束)。一定程度上解决了上面读提交引起的“不可重复读”问题。
注意事项:其他事务 insert 的数据可以被当前正在执行的事务读取到,导致查询时会多出新的记录,这种现象叫做“幻读”,如果出现了幻觉一般。但是MySQL在该级别下是解决了幻读问题的,采用的方式为 Next-Key 锁。

(4) 串行化(Serializable)
意义:所有的事务按照顺序依次处理,不会存在并发问题,但是效率极低。一般不会采用
相关文章:
Mysql 事务的隔离性(隔离级别)
Mysql 中的事务分为手动提交和自动提交,默认是自动提交,所以我们在Mysql每输入一条语句,其实就会被封装成一个事务提交给Mysql服务端。 手动提交需要先输入begin,表示要开始处理事务,然后就是常见的sql语句操作了&…...
2023年网络安全竞赛——Python渗透测试PortScan.py
端口扫描Python渗透测试:需求环境可私信博主获取 任务环境说明: 服务器场景:PYsystem0041服务器场景操作系统:未知服务器场景FTP用户名:anonymous 密码:空1. 从靶机服务器的FTP上下载PortScan.py,编辑Python程序PortScan.py,实现...
【数据结构】栈的接口实现(附图解和源码)
栈的接口实现(附图解和源码) 文章目录栈的接口实现(附图解和源码)前言一、定义结构体二、接口实现(附图解源码)1.初始化栈2.销毁栈3.入栈4.判断栈是否为空5.出栈6.获取栈顶元素7.获取栈中元素个数三、源代码…...
LC-1255. 得分最高的单词集合(回溯)
1255. 得分最高的单词集合 难度困难60 你将会得到一份单词表 words,一个字母表 letters (可能会有重复字母),以及每个字母对应的得分情况表 score。 请你帮忙计算玩家在单词拼写游戏中所能获得的「最高得分」:能够由…...
从中国文化看面试挑人标准
文章目录标准一、面相1. 1 四白眼1.2 浓眉二、讲话2.1 言多与气虚总结本文结合中国面相,是个概率性问题,对于个体无效。 标准 正直,三观正,沟通好,技术。从概率上讲: 正直且三观正的人----有恒心&#x…...
谦卑对象设计模式
谦卑设计模式介绍 “谦卑”在这里是拟人化的,指难以测试的对象清晰地认识到自己的局限性,只发挥自己的桥梁和通信作用,并不从中干预信息的传输。 谦卑对象模式‘最初的设计目的是帮助单元测试的编写者区分容易测试的行为与难以测试的行为,并将它们隔离。其设计思路…...
QML Animation动画详解
1.Animation简介 Animation类型提供了四个属性: alwaysRunToEnd:该属性接收布尔类型的参数。该属性保存动画是否运行到完成才停止。当loops属性被设置时,这个属性是最有用的,因为动画将正常播放结束,但不会重新启动。…...
C#开发的OpenRA的加载界面边框的细节
C#开发的OpenRA的加载界面边框的细节 在前面已经看到加载整个界面, 如果仔细地看,会发现加载界面的边框有一个红色的框。 这个红色的边框到底是怎么样来的呢? 其实它不是实时画上去的,而从纹理贴图里贴上去的。 也许有一些人会问,纹理贴图里的图片这么小,怎么样会有这么大…...
计算机网络笔记、面试八股(四)—— TCP连接
本章目录4. TCP连接4.1 TCP报文段的首部格式4.2 TCP连接如何保证可靠4.3 ARQ协议4.3.1 停止等待ARQ协议4.3.1.1 无差错情况4.3.1.2 出现差错情况4.3.1.3 确认丢失和确认迟到4.3.2 连续ARQ协议4.3.2.1 流水线传输4.3.2.2 累积确认4.3.2.3 滑动窗口协议4.3.3 停止等待ARQ和连续AR…...
Centos7 安装jenkins java1.8版本
1. 首先安装好jdk1.8 2. 安装jenkins 命令:(可以在根目录,创建文件夹 mkdir home 然后在此文件夹下操作 cd /home) a 清华源,获取jenkins安装包 wget https://mirrors.tuna.tsinghua.edu.cn/jenkins/redhat/jenkins-2.346-1.1.noarch.rp…...
【每日阅读】JS知识(三)
var声明提升 js是一个解释性语言类型,预解析就是在执行代码之前对代码进行通读 var关键字是,在内存中声明一个变量名 js在代码执行之前 会经历两个环节 解释代码 和执行代码 声明式函数 内存中 先声明一个变量名是函数 这个名代表的是函数 乘法表 // for…...
Vue(6)
文章目录1. 自定义指令1.1 函数式1.2 对象式1.3 自定义指令常见坑1.4 创建全局指令2. 生命周期2.1 引出生命周期2.2 分析生命周期2.3 总结3. 组件3.1 认识组件3.2 使用组件 (非单文件组件)3.3 全局组件3.4 组件的几个注意点3.5 组件的嵌套3.6 VueComponent 构造函数3.7 一个重要…...
Neo4j列表函数
使用列表 标量列表函数 size() 函数返回列表中的元素的数量 MATCH (p:Person)-[:ACTED_IN]->(m:Movie) WITH p, collect (m.title) AS MovieTitles WITH p, MovieTitles, size(MovieTitles) AS NumMovies WHERE NumMovies > 20 RETURN p.name AS Actor, NumMovies, Movie…...
55. 跳跃游戏
给定一个非负整数数组 nums ,你最初位于数组的 第一个下标 。数组中的每个元素代表你在该位置可以跳跃的最大长度。判断你是否能够到达最后一个下标。示例 1:输入:nums [2,3,1,1,4]输出:true解释:可以先跳 1 步&#…...
typedef在c语言中的作用
在 C 语言中,typedef 是一个非常有用的关键字,用于给数据类型定义一个新的名字。typedef 的作用有以下几个方面: 定义新类型名:typedef 可以定义一个新的数据类型名称,使得该类型名称可以在程序中使用。这样可以提高代…...
计算机网络体系结构及分层参考模型
文章目录一、分层设计思想的提出二、网络分层的必要性三、什么是计算机网络体系结构四、计算机网络参考模型OSI参考模型/五层参考模型/TCP/IP参考模型一、分层设计思想的提出 最早提出分层思想的是 ARPANET网。1969年11月,美国国防部开始建立一个命名为ARPANET的网络…...
LLVM程序分析与编译转换框架论文分享
LLVM 2004年论文原文 概述 本文描述了 LLVM(低级虚拟机),一种编译器框架,旨在通过在编译时、链接时、运行时,以及运行之间的空闲时间。 LLVM 以静态单一赋值 (SSA) 形式定义了一种通用的低级代码表示,具有…...
《程序员思维修炼》速读笔记
文章目录书籍信息概览绪论从新手到专家的历程认识大脑利用右脑调试大脑主动学习积累经验控制注意力超越专家图解书籍信息 书名:《程序员思维修炼(修订版)》 作者:[美] Andy Hunt 概览 绪论 再提“实用”关注情境所有人都关注这…...
【Hello Linux】进程概念
作者:小萌新 专栏:Linux 作者简介:大二学生 希望能和大家一起进步! 本篇博客简介:简单介绍下进程的概念 进程基本概念PCB 程序控制块task_struct是什么task_struct里面有什么查看进程通过系统目录查看进程通过ps指令查…...
Bunifu.UI.WinForms 6.0.2 Crack
Bunifu.UI.WinForms为 WinForms创建令人惊叹的UI Bunifu.UI.WinForms我们为您提供了现代化的快速用户界面控件。用于 WinForms C# 和 VB.NET 应用程序开发的完美 UI 工具 简单 Bunifu.UI.WinForms没有臃肿的特征。正是您构建令人惊叹的 WinForms 应用程序所需要的。只需拖放然…...
实战演练:基于kimi与快马平台快速开发一个交互式销售数据可视化看板
今天想和大家分享一个实战项目:如何用Kimi和InsCode(快马)平台快速搭建一个销售数据可视化看板。整个过程比我预想的顺利很多,特别适合需要快速验证业务需求的场景。 项目背景与需求拆解 最近在帮朋友的小型电商团队优化运营流程,他们最头疼…...
【obs studio】从零开始:高效录制屏幕与声音的完整指南
1. 为什么选择OBS Studio录制屏幕与声音? 如果你正在寻找一款免费、开源且功能强大的屏幕录制工具,OBS Studio绝对是你的不二之选。我最初接触这款软件是因为需要录制一些技术教程,试过市面上不少付费软件后,发现OBS Studio不仅完…...
OpenClaw高消耗场景优化:Qwen3-32B私有镜像成本实测
OpenClaw高消耗场景优化:Qwen3-32B私有镜像成本实测 1. 问题背景与测试动机 最近在尝试用OpenClaw自动化处理我的日常工作流时,发现一个令人头疼的问题:长链条任务的Token消耗简直像开了水龙头一样。最夸张的一次,一个简单的&qu…...
Cisco Packet Tracer新手必看:5分钟搞定路由器静态路由配置(附避坑指南)
Cisco Packet Tracer静态路由配置实战:从零到精通的完整指南 刚接触网络工程的朋友们,第一次在Cisco Packet Tracer中配置静态路由时,是不是经常遇到"网络不通"的困扰?作为网络通信的基础技能,静态路由配置看…...
【Python内存管理终极指南】:20年专家亲授智能体内存优化的5大架构设计图与3个致命误区
第一章:Python智能体内存管理的核心原理与演进脉络 Python的内存管理并非由开发者手动控制,而是由解释器内置的“智能体”协同完成——它融合了引用计数、循环垃圾回收(GC)和内存池机制三重策略,在运行时动态权衡效率与…...
uniapp日期处理全攻略:获取某月首尾日、近七天日期等实用技巧
Uniapp日期处理实战:从基础格式化到高级业务场景解决方案 在移动应用开发中,日期处理几乎贯穿所有业务场景。无论是电商平台的限时抢购、医疗应用的预约挂号,还是企业系统的报表统计,精准高效的日期操作都是保障业务逻辑完整性的关…...
终极指南:如何让Nautilus、Dolphin等Linux文件管理器拥有macOS Finder般流畅的快捷键体验
终极指南:如何让Nautilus、Dolphin等Linux文件管理器拥有macOS Finder般流畅的快捷键体验 【免费下载链接】kinto Mac-style shortcut keys for Linux & Windows. 项目地址: https://gitcode.com/gh_mirrors/kin/kinto 你是否厌倦了在Linux文件管理器中不…...
将 OnePlus 手机备份到云服务
丢失 OnePlus 设备上的珍贵照片、重要联系人、短信或应用数据可能会令人非常沮丧,无论是意外删除、设备损坏、被盗,甚至是恢复出厂设置。这时,云备份就派上了用场。它提供了一种简单可靠的数据保护方式,确保您可以随时随地在新 On…...
Android Perfetto 系列 6:为什么是 120Hz?高刷新率的优势与挑战
Android Perfetto 系列 6:为什么是 120Hz?高刷新率的优势与挑战本文是 Android Perfetto 系列的第六篇,主要介绍 Android 设备上 120Hz 刷新率的相关知识。如今,120Hz 已成为 Android 旗舰手机的标配,本文将讨论高刷新…...
如何通过WebGLInput彻底解决Unity WebGL平台的输入法兼容性问题
如何通过WebGLInput彻底解决Unity WebGL平台的输入法兼容性问题 【免费下载链接】WebGLInput IME for Unity WebGL 项目地址: https://gitcode.com/gh_mirrors/we/WebGLInput 你是否曾尝试在Unity WebGL应用中实现中文输入,却发现输入法无法正常工作…...
