当前位置: 首页 > news >正文

mysql事务的隔离级别学习

事务的隔离级别:

ⅰ. 读未提交
ⅱ. 对已提交 (解决 脏读)
ⅲ. 可重复读 (解决 不可重复读)
ⅳ. 串行化 (解决 脏读 不可重复读 幻读 问题 )

隔离级别分类如下,在不同的隔离级别下可能产生不同的问题,如脏读、不可重复度、幻读等,我们会在后边的课程中一一讲解:隔离级别	脏读	不可重复读	幻读	解决方案
Read uncommitted(读未提交)	√	√	√	
Read committed(读已提交)	×	√	√	undo log
Repeatable read(可重复读)	×	×	√	MVCC版本控制+间隙锁(mysql的rr不存在幻读)
Serializable(串行化)	×	×	×	
show variables like 'transaction_isolation'; # 查看mysql 事务的隔离级别变量

在mysql中查看和设置【事务的隔离级别】,语法如下:

-- 查看全局和当前事务的隔离级别
SELECT @@global.transaction_isolation, @@transaction_isolation_isolation;
show variables like 'transaction_isolation';
--5.7   tx_isolation
--8.0   transaction_isolation-- 设置下一个事务的隔离级别
SET transaction isolation level read uncommitted;
SET transaction isolation level read committed;
set transaction isolation level repeatable read;
SET transaction isolation level serializable;
-- 设置当前会话的隔离级别
SET session transaction isolation level read uncommitted;
SET session transaction isolation level read committed;
set session transaction isolation level repeatable read;
SET session transaction isolation level serializable;
-- 设置全局事务的隔离级别
SET GLOBAL transaction isolation level read uncommitted;
SET GLOBAL transaction isolation level read committed;
set GLOBAL transaction isolation level repeatable read;
SET GLOBAL transaction isolation level serializable;其中,SESSION 和 GLOBAL 关键字用来指定修改的事务隔离级别的范围:
SESSION:表示修改的事务隔离级别将应用于当前 session(当前 cmd 窗口)内的所有事务;
GLOBAL:表示修改的事务隔离级别将应用于所有 session(全局)中的所有事务,且当前已经存在的 session 不受影响;
如果省略 SESSION 和 GLOBAL,表示修改的事务隔离级别将应用于当前 session 内的下一个还未开始的事务。
ⅴ. #1、读未提交(RU)
【ru隔离级别】说的简单一点就是,一个事务可以读取其他【未提交的事务】修改的数据,
这种隔离级别最低,一般情况下,数据库隔离级别都要高于该级别,该隔离级别下,可能会存在脏读、
不可重复度,幻读的问题。
**脏读:**指的是一个事务读到了其他事务未提交的数据,未提交意味着这些数据可能会回滚,
读到的数据不一定准确。

案例:

模拟转账

使用两个窗口,开启两个事务,且将隔离级别设置为RU(读未提交)。

1. 读未提交 情况:

事务2 读取到了事务 1 未提交的数据 (id= 2行数据) 当 事务1 回滚后 id=2 数据 重新 恢复

事务 1

事务 2

ⅵ. 、读已提交(RC)

【RC读已提交】说的是当前事务只能读到别的事物已经提交的数据,该隔离级别可能会产生不可重复读和幻读。

【不可重复读】的官方解释是:【一个事务】(A事务)修改了【另一个未提交事务】(B事务)读取过的数据。那么B事务【再次读取】,会发现两次读取的数据不一致。也就是说在一个原子性的操作中一个事务两次读取相同的数据,却不一致,一行数据不能重复被读取。主要是【update】语句,会导致不可重复读。

案例:

  1. 修改事务 的隔离级别 为 read commit;

事务1 可以看到 在同一个事务中 有不同的 读取 结果 即为 不可重复读

原因是在另一个事务中提交了 数据的修改

当隔离级别设置为Read committed 时,避免了脏读,但是可能会造成不可重复读。

大多数数据库的默认级别就是Read committed,比如Sql Server , Oracle。如何解决不可重复读这一问题,请看下一个隔离级别。

ⅶ. 3、可重复读(RR)

学习完不可重复读,理解【可重复读】就简单多了,他的意思是,同一个事务中发出同一个SELECT语句【两次或更多次】,那么产生的结果数据集总是相同的,在RR隔离级别中可能出现幻读。

**幻读:**一个事务按照某些条件进行查询,事务提交前,有另一个事务插入了满足条件的其他数据,再次使用相同条件查询,却发现多了一些数据,就像出现了幻觉一样。幻读主要针对针对delete和insert语句。

不可重复读强调的是两次读取的数据【内容不同】,幻读前调的是两次读取的【行数不同】。

案例

  1. 设置 事务的隔离级别

在 一个事务中 插入一行数据,但在另一个数据中却查不到 ,可以看到在可重复读的隔离级别中,

幻读问题是得到一定解决的。

但当我 们在 同一个事务中 更新 一下,再查询一下时我们发现了 一个牛逼的现象, 我们在另一个事务中添加的数据出现了 ,幻读问题出现。

*注意:**在mysql中的RR隔离级别中,innodb使用mvcc+锁帮我们解决了绝大部分的幻读情况,上边的例子稍微修改一下,我们就能看到幻读现象了。
ⅷ. 4、串行化 (相当于给每张表上了一个写锁)
  • 事务A和事务B,事务A在操作数据库时,事务B只能排队等待
  • 这种隔离级别很少使用,吞吐量太低,用户体验差

这种级别可以避免“幻读”,每一次读取的都是数据库中真实存在数据,事务A与事务B串行,而不发。

相关文章:

mysql事务的隔离级别学习

事务的隔离级别: ⅰ. 读未提交 ⅱ. 对已提交 (解决 脏读) ⅲ. 可重复读 (解决 不可重复读) ⅳ. 串行化 (解决 脏读 不可重复读 幻读 问题 ) 隔离级别分类如下,在不同的隔离级别下可能产生不…...

Chainlit集成Langchain并使用通义千问实现和数据库交互的网页对话应用增强扩展(text2sql)

前言 我在上一篇文章中《Chainlit集成Langchain并使用通义千问实现和数据库交互的网页对话应用(text2sql)》 利用langchain 中create_sql_agent 创建一个数据库代理智能体,但是实测中发现,使用 create_sql_agent 在对话中&#x…...

rapidocr 提取汇总

rapidocr介绍 A cross platform OCR Library based on OnnxRuntime. 以下资料是根据RapidOCR获得2024中国互联网发展创新与投资大赛(开源)二等奖整理汇编的 支持识别的文种如下: 中、英、日、韩、中文繁体、泰卢固文、卡纳达文、泰米尔文、拉丁文、 阿拉伯字母 、斯拉夫字…...

Linux:用户账号管理和组账号管理

用户账号管理 账号控制总述 用户账户 作用: 1.可以登陆操作系统 2.不同的用户具备不同的权限 唯一标识:UID(编号从0开始的编号,默认最大60000)zhangsan(UID 1200) 管理员root的UID:永远为0 系统用户(为程…...

MyBatis-Plus分页查询、分组查询

目录 准备工作1. 实体类2. Mapper类3. 分页插件4. 数据 分页查询1. 使用条件构造器2. 使用自定义sql 分组查询1. 分组结果类2. 自定义sql3. 测试类 准备工作 1. 实体类 对地址字段address使用字段类型转换器,将List转为字符串数组保存在数据库中 package com.exa…...

2024年9月HarmonyOS鸿蒙应用开发者高级认证全新题库(覆盖99%考题)

一个小时通过鸿蒙高级认证 1、在开发 Harmony0S 应用工程时, 随着业务的发展,现在需要创建一个模块, 关于在 DevEco Studio 中创建 Module , 下列选项哪种方式是错误的? 必对 在 hvigor 目录下,单击鼠标右键&#xf…...

大工程师插件下载 官方地址

https://download.3dsource.cn/3DSource_Client.exe...

rtems 5.3 qemu realview_pbx_a9 环境搭建:生成 rtems arm 工具链

前言 rtems 是一款比较优秀的 RTOS,官方网址 https://www.rtems.org/ 当前 rtems 最新发布的版本:rtems-5.3 版本, 下载地址 https://ftp.rtems.org/pub/rtems/releases/5/5.3/ rtems 支持的 平台也是比较多的,当前支持 STM32F4…...

【算法】栈与模拟

【ps】本篇有 5 道 leetcode OJ。 目录 一、算法简介 二、相关例题 1)删除字符串中的所有相邻重复项 .1- 题目解析 .2- 代码编写 2)比较含退格的字符串 .1- 题目解析 .2- 代码编写 3)基本计算器 II .1- 题目解析 .2- 代码编写 4&…...

【Django】Django AI 聊天机器人项目:基于 ChatGPT 的 Django REST API

Django AI 聊天机器人项目:基于 ChatGPT 的 Django REST API 本文档将介绍如何使用 Django 和 Django REST Framework 构建一个 AI 聊天机器人项目,并结合 OpenAI 的 GPT 模型提供代码解释服务。步骤包括创建 Django 项目、配置 API、与 OpenAI 集成&am…...

System.out源码解读——err 和 out 一起用导致的顺序异常Bug

前言 笔者在写一个小 Demo 的过程中&#xff0c;发现了一个奇怪的问题。问题如下&#xff1a; // 当 flagtrue 时打印 a1 &#xff1b;当 flagfalse 时打印 a2。 public static void main(String[] args) {boolean flag false;for (int i 0; i < 10; i) {if (flag) {Sys…...

汽车软件开发之敏捷开发

一、前言 目前汽车电子产品&#xff0c;特别是汽车几大域控&#xff08;如&#xff1a;智能座舱、智能驾驶、智能网联、车身控制&#xff09;市场竞争激烈&#xff0c;消费者对汽车的需求逐渐多元化和个性化&#xff0c;用户对座舱和智驾产品的要求也越来越高。他们不仅要求产…...

ListBox显示最新数据、左移和右移操作

1、程序 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.IO; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using static Sys…...

mysql实用系列:日期格式化

在MySQL中&#xff0c;你可以使用DATE_FORMAT()函数来格式化日期。DATE_FORMAT() 函数通常用于格式化 DATETIME 或 TIMESTAMP类型的字段。这个函数允许你按照指定的格式来显示日期和时间。下面是一些常见的日期格式化的例子&#xff1a; 显示年-月-日&#xff1a; SELECT DATE_…...

时钟频率、AI采样率与AO更新率的关系

在数据采集和信号生成设备&#xff08;如NI板卡&#xff09;中&#xff0c;时钟频率、AI&#xff08;模拟输入&#xff09;采样率、以及AO&#xff08;模拟输出&#xff09;更新率是三个至关重要的参数。它们共同决定了设备在信号采集与生成时的性能表现。本文将详细分析它们之…...

代理IP设置后IP不变?可能的原因及解决方法

在使用代理IP时&#xff0c;有时会遇到代理设置后IP地址却没有变化的情况。这种问题可能会让人感到困惑&#xff0c;但其实背后有多种原因。本文将详细探讨这些原因&#xff0c;并提供相应的解决方法&#xff0c;帮助你顺利解决问题。 可能的原因 代理IP设置后IP地址不变的原…...

瑞芯微RK3588开发板Linux系统添加自启动命令的方法,深圳触觉智能Arm嵌入式鸿蒙硬件方案商

本文适用于触觉智能所有Linux系统的开发板、主板添加自启动命令的方法&#xff0c;本次使用了触觉智能的EVB3588开发板演示&#xff0c;搭载了瑞芯微RK3588旗舰芯片。 该开发板为核心板加底板设计&#xff0c;为工业场景设计研发的模块化产品&#xff0c;10年以上稳定供货,帮助…...

Varjo在芬兰开设新工厂,以满足国防部门在XR模拟训练中的需求

在军事国防领域&#xff0c;全新技术的投入使用最看重的就是保密与安全。作为全球领先的XR头戴式显示器提供商Varjo&#xff0c;近日正式宣布将在位于芬兰的赫尔辛基开设一家新的安全制造工厂。 此次工厂扩建将使Varjo能够满足国防训练和模拟领域对其高分辨率XR解决方案日益增…...

python 识别省市、区县并组建三级信息数据库

一、网址&#xff1a; 全国行政区划信息查询平台 二、分析并搭建框架 检查网页源码&#xff1a; 检查网页源码可以发现&#xff1a; 所有省级信息全部在javaScript下的json中&#xff0c;会在页面加载时加载json数据&#xff0c;填充到页面的option中。 1、第一步&#xff1a…...

家用小型超声波清洗机怎么选?四大人气爆款品牌不可错过!

在现代社会快节奏的步伐中&#xff0c;保持高度的个人及家居卫生标准成为了日常生活的重要组成部分&#xff0c;对于追求高端生活品质的人群而言&#xff0c;这一点尤为重要。因此&#xff0c;选取一款集高效与便利于一体的超声波清洗机&#xff0c;无疑是升级日常清洁体验的理…...

异步流式响应总卡顿、丢帧、OOM?FastAPI 2.0三大核心配置必须在上线前重写,否则AI服务将不可用

第一章&#xff1a;FastAPI 2.0异步AI流式响应的典型故障图谱在 FastAPI 2.0 中启用异步流式响应&#xff08;如 StreamingResponse 配合 async generator&#xff09;处理大语言模型推理输出时&#xff0c;常见故障并非源于逻辑错误&#xff0c;而是由异步生命周期、客户端兼容…...

广州SEO优化对网站转化有什么帮助_广州SEO优化应该注意哪些问题

<h2>广州SEO优化对网站转化有什么帮助</h2> <p>在当今数字化时代&#xff0c;广州SEO优化成为了企业提升在线业务的关键策略。广州作为中国南方的重要城市&#xff0c;其互联网市场竞争激烈&#xff0c;掌握有效的SEO优化手段对于提升网站转化率至关重要。广…...

ICP配准遇到点云尺度不一致?3步搞定相似变换矩阵(附OpenCV代码)

ICP配准中处理点云尺度不一致的实战指南 在三维视觉开发领域&#xff0c;点云配准是SLAM、三维重建等应用中的基础操作。但当我们面对来自不同传感器或采集条件的点云数据时&#xff0c;经常会遇到一个棘手问题——两组点云的尺度不一致。这就像试图用厘米尺和英寸尺测量同一物…...

掌握Python自动化抢票:开源工具助你高效获取演唱会门票

掌握Python自动化抢票&#xff1a;开源工具助你高效获取演唱会门票 【免费下载链接】DamaiHelper 大麦网演唱会演出抢票脚本。 项目地址: https://gitcode.com/gh_mirrors/dama/DamaiHelper 在演出票务竞争日益激烈的当下&#xff0c;手动抢票已难以应对毫秒级的抢票环境…...

OpenClaw内容创作流水线:nanobot镜像从选题到发布的自动化

OpenClaw内容创作流水线&#xff1a;nanobot镜像从选题到发布的自动化 1. 为什么需要内容创作自动化 作为一名技术博主&#xff0c;我每天都要面对一个永恒难题&#xff1a;如何在有限时间内持续产出高质量内容。传统写作流程需要经历选题调研、大纲设计、初稿撰写、SEO优化、…...

5个超实用技巧:用Awesome Adb实现手机调试效率倍增

5个超实用技巧&#xff1a;用Awesome Adb实现手机调试效率倍增 【免费下载链接】awesome-adb ADB Usage Complete / ADB 用法大全 项目地址: https://gitcode.com/gh_mirrors/aw/awesome-adb 副标题&#xff1a;告别繁琐操作&#xff0c;让Android设备管理效率提升10倍 …...

EverythingPowerToys正则表达式搜索:解锁精准文件匹配的强大功能

EverythingPowerToys正则表达式搜索&#xff1a;解锁精准文件匹配的强大功能 【免费下载链接】EverythingPowerToys Everything search plugin for PowerToys Run 项目地址: https://gitcode.com/gh_mirrors/ev/EverythingPowerToys EverythingPowerToys是一款专为Power…...

BERT自然语言处理模型:从入门到实践完整指南

BERT自然语言处理模型&#xff1a;从入门到实践完整指南 【免费下载链接】bert TensorFlow code and pre-trained models for BERT 项目地址: https://gitcode.com/gh_mirrors/be/bert BERT&#xff08;Bidirectional Encoder Representations from Transformers&#x…...

Kubernetes 与 GitOps 最佳实践

Kubernetes 与 GitOps 最佳实践 一、前言 哥们&#xff0c;别整那些花里胡哨的。GitOps 是现代 Kubernetes 运维的重要趋势&#xff0c;今天直接上硬货&#xff0c;教你如何在 Kubernetes 中实现 GitOps 工作流。 二、GitOps 核心概念 概念描述优势声明式配置所有配置以声明式方…...

从零构建:基于C语言的Modbus RTU从站驱动开发指南

1. Modbus RTU从站驱动开发入门指南 第一次接触Modbus RTU从站开发时&#xff0c;我完全被各种专业术语搞晕了。后来在工厂里调试一个温湿度传感器时&#xff0c;才真正理解这个协议的精妙之处——它就像车间里老师傅们约定俗成的对话方式&#xff0c;主设备问一句&#xff0c;…...