MySQL高级(三):事务隔离

MySQL 的事务隔离性是数据库事务管理的重要特性之一,它定义了在并发环境中,不同事务间的互相影响。事务隔离性决定了一个事务执行过程中,其他事务对它的操作是否可见,以及在并发环境下如何避免数据不一致的情况。

MySQL 支持的事务隔离级别有四种,分别是:

  • READ UNCOMMITTED(读取未提交)
  • READ COMMITTED(读取已提交)
  • REPEATABLE READ(可重复读)
  • SERIALIZABLE(可串行化)

READ UNCOMMITTED(读取未提交)

  • 描述:在这个隔离级别下,事务可以读取其他事务尚未提交的数据,也就是说,事务可以看到"脏数据"(Dirty Read)。这种隔离级别允许事务读取其他事务未提交的修改。

  • 问题

    • 脏读(Dirty Read):一个事务读取到另一个事务未提交的数据,而后者的事务如果回滚,这时前者读取的数据就不再有效,造成数据的不一致。
    • 不可重复读(Non-repeatable Read):如果一个事务在执行过程中多次查询同一数据,而该数据在查询过程中被其他事务修改,导致查询结果不一致。
    • 幻读(Phantom Read):当一个事务在查询时,另一个事务插入、更新或删除了数据,导致前一个事务查询的结果集发生变化。
  • 适用场景:该级别适用于对数据一致性要求不高的场景,性能优先的情况。

READ COMMITTED(读取已提交)

  • 描述:在该隔离级别下,事务只能读取已经提交的数据。这意味着一个事务只能看到其他事务提交后的数据,不能看到未提交的脏数据。每次查询时都会读取到最新已提交的数据。

  • 问题

    • 不可重复读(Non-repeatable Read):一个事务如果执行两次相同的查询操作,可能会读到不同的结果,因为其他事务在中间提交了修改。
    • 幻读(Phantom Read):类似于 “可重复读” 级别的问题,其他事务在查询期间可能会插入或删除数据,导致查询的结果发生变化。
  • 适用场景:适用于对事务一致性要求相对较高,但对性能要求较高的场景。常见的 OLTP 系统中,很多时候会采用这个级别。

REPEATABLE READ(可重复读)

  • 描述:在此隔离级别下,事务在执行期间会看到相同的数据。即一个事务执行时,它对同一数据的查询结果在事务结束之前都是一致的,避免了不可重复读的问题。

  • 特点

    • 避免脏读和不可重复读:保证事务内部的一致性,事务执行期间读到的数据是事务开始时的快照,不受其他事务影响。
    • 幻读问题:虽然该级别可以解决脏读和不可重复读,但仍然可能发生幻读(即其他事务插入新的记录,导致当前事务查询结果集变化)。MySQL InnoDB 存储引擎通过使用 Next-Key Lock 来减少幻读的发生。
  • 适用场景:适合大部分需要强一致性的应用,特别是金融等要求较高事务一致性的应用。

SERIALIZABLE(可串行化)

  • 描述:该隔离级别是最严格的,事务执行时会强制其他事务等待。为了避免并发冲突,SERIALIZABLE 隔离级别会使事务像串行执行一样,确保事务之间完全没有重叠。这会锁定读取的数据行或数据集,防止其他事务插入、更新或删除这些数据。

  • 问题

    • 性能开销大:因为每个事务都必须等待前一个事务完成后才能开始,导致并发性大大降低,性能最差。
    • 避免脏读、不可重复读和幻读:这是该隔离级别的优点,它避免了所有类型的读一致性问题。
  • 适用场景:适用于极端情况下,要求数据一致性和隔离性非常高的场景,比如在金融行业的关键操作中。

隔离级别脏读不可重复读幻读锁定方式
READ UNCOMMITTED允许允许允许
READ COMMITTED不允许允许允许行级锁
REPEATABLE READ不允许不允许允许行级锁、Next-Key Lock
SERIALIZABLE不允许不允许不允许全表锁/行锁

总结

  • READ UNCOMMITTED:最弱的隔离级别,可能发生脏读、不可重复读和幻读,性能最优,但不适合需要高一致性的场景。
  • READ COMMITTED:解决了脏读问题,但可能发生不可重复读和幻读,适合大多数场景。
  • REPEATABLE READ:提供了更强的保证,避免了脏读和不可重复读,但仍然可能发生幻读,适合需要高一致性的事务。
  • SERIALIZABLE:最强的隔离级别,完全避免了所有一致性问题,但性能最差,适合对事务一致性要求极高的场景。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/16673.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

linux病毒编写+vim shell编程

学习视频来自B站UP主泷羽sec,如涉及侵权马上删除文章 感谢泷羽sec 团队的教学 请一定遵循《网络空间安全法》!!! Linux目录介绍 /bin 二进制可执行文件(kali里面是工具一些文件)/etc 系统的管理和配置文…

【小程序】dialog组件

这个比较简单 我就直接上代码了 只需要传入title即可&#xff0c; 内容部分设置slot 代码 dialog.ttml <view class"dialog-wrapper" hidden"{{!visible}}"><view class"mask" /><view class"dialog"><view …

【玩具蛇——DFS】

题目 代码 #include <bits/stdc.h> using namespace std; int g[5][5]; int dx[] {0, 0, -1, 1}, dy[] {-1, 1, 0, 0}; int ans; void dfs(int x, int y, int t) {g[x][y] t;if (t > 16){ans;g[x][y] 0;return;}for (int i 0; i < 4; i){int nx x dx[i], n…

aar打包以及混淆问题

我们做sdk&#xff0c;经常要打成aar包。 如何打aar包&#xff1f; 1、首先module必须是library 2、build.gradle写的应用aar和module&#xff0c;要改成compileOnly&#xff0c;这样打包的时候就不会报错&#xff0c;因为aar不允许包含其他aar 3、 4、 aar包如何混淆 bui…

hhdb数据库介绍(9-14)

SQL语法支持 DML语句 在关系集群数据库中&#xff0c;DML语句的逻辑将变的更为复杂。计算节点将DML语句分为两大类&#xff1a;单库DML语句与跨库DML语句。 单库DML语句&#xff0c;指SQL语句只需在一个节点上运行&#xff0c;即可计算出正确结果。假设分片表customer分片字…

IDEA旗舰版编辑器器快速⼊门(笔记)

简介&#xff1a;javaweb开发必备软件之IDEA期间版介绍 DEA编辑器器版本介绍 官⽹网&#xff1a;https://www.jetbrains.com/地址&#xff1a;https://www.jetbrains.com/idea/download/#sectionmac DEA 分社区版(Community) 和 旗舰版(Ultimate)&#xff0c;我们做JavaWeb开…

HTML5实现剪刀石头布小游戏(附源码)

文章目录 1.设计来源1.1 主界面1.2 皮肤风格1.2 游戏中界面 2.效果和源码源码下载万套模板&#xff0c;程序开发&#xff0c;在线开发&#xff0c;在线沟通 作者&#xff1a;xcLeigh 文章地址&#xff1a;https://blog.csdn.net/weixin_43151418/article/details/143798520 HTM…

DAY65||Bellman_ford 队列优化算法(又名SPFA)|bellman_ford之判断负权回路|bellman_ford之单源有限最短路

Bellman_ford 队列优化算法&#xff08;又名SPFA&#xff09; 94. 城市间货物运输 I 思路 大家可以发现 Bellman_ford 算法每次松弛 都是对所有边进行松弛。 但真正有效的松弛&#xff0c;是基于已经计算过的节点在做的松弛。 给大家举一个例子&#xff1a; 本图中&#xff…

关于adb shell登录开发板后terminal显示不完整

现象 今天有个同事跟我说&#xff0c;adb shell 登录开发板后&#xff0c;终端显示不完整&#xff0c;超出边界后就会出现奇怪的问题&#xff0c;比如字符覆盖显示等。如下图所示。 正常情况下应该如下图所示&#xff1a; 很明显&#xff0c;第一张图的显示区域只有完整区域…

01 P2367 语文成绩

题目&#xff1a; 样例输入&#xff1a; 3 2 1 1 1 1 2 1 2 3 1 样例输出&#xff1a; 2 代码&#xff1a; #include<bits/stdc.h> using namespace std;long long sa[5000005]; long long sb[5000005];int main() {int n,p;cin>>n>>p;for(int i1;i<n;i)…

聊聊Flink:Flink的分区机制

一、前言 flink任务在执行过程中&#xff0c;一个流&#xff08;stream&#xff09;包含一个或多个分区&#xff08;Stream partition&#xff09;。TaskManager中的一个slot的subtask就是一个stream partition&#xff08;流分区&#xff09;&#xff0c;一个Job的流&#xf…

VRRP HSRP GLBP 三者区别

1. VRRP&#xff08;Virtual Router Redundancy Protocol&#xff0c;虚拟路由冗余协议&#xff09; 标准协议&#xff1a;VRRP 是一种开放标准协议&#xff08;RFC 5798&#xff09;&#xff0c;因此支持的厂商较多&#xff0c;通常用于多种网络设备中。主备模式&#xff1a;…

VMware 17虚拟Ubuntu 22.04设置共享目录

VMware 17虚拟Ubuntu 22.04设置共享目录 共享文件夹挂载命令&#xff01;&#xff01;&#xff01;<font colorred>配置启动自动挂载Chapter1 VMware 17虚拟Ubuntu 22.04设置共享目录一、卸载老版本二、安装open-vm-tools<font colorred>三、配置启动自动挂载四、添…

二叉树Golang

二叉树 前言 完全二叉树 最底层节点按顺序从左到右排列。 满二叉树 一颗二叉树只有0度和2度的节点。 二叉搜索树 左子树上的所有节点的值均小于根节点的值。右子树上的所有节点的值均大于根节点的值。 平衡二叉搜索树 左右两个子树的高度差的绝对值不超过1 。 二叉树的存储…

【鸿蒙开发】第十三章 ArkTS基础类库-容器(数据结构)

目录 1 容器简述 2 线性容器 2.1 ArrayList 2.2 Vector 2.3 List 2.4 LinkedList 2.5 Deque 2.6 Queue 2.7 Stack 2.8 线性容器的使用 3 非线性容器 3.1 HashMap 3.2 HashSet 3.3 TreeMap 3.4 TreeSet 3.5 LightWeightMap 3.6 LightWeightSet 3.7 PlainArray…

3D电子商务是什么?如何利用3D技术提升销售转化?

在数字化浪潮席卷全球的今天&#xff0c;网上购物已成为消费者日常生活中不可或缺的一部分。然而&#xff0c;尽管其便捷性无可比拟&#xff0c;但传统电商模式中的“看不见、摸不着”问题始终困扰着消费者与商家。商品是否符合期望、尺寸是否合适、颜色是否真实……这些不确定…

腾讯地图GL JS点标识监听:无dragend事件的经纬度获取方案

引入腾讯地图SDK <!--腾讯地图 API--><script charset"utf-8" src"https://map.qq.com/api/gljs?librariestools&v1.exp&key***"></script>构建地图容器 <div class"layui-card"><div class"layui-car…

基于SpringBoot+RabbitMQ完成应⽤通信

前言&#xff1a; 经过上面俩章学习&#xff0c;我们已经知道Rabbit的使用方式RabbitMQ 七种工作模式介绍_rabbitmq 工作模式-CSDN博客 RabbitMQ的工作队列在Spring Boot中实现&#xff08;详解常⽤的⼯作模式&#xff09;-CSDN博客作为⼀个消息队列,RabbitMQ也可以⽤作应⽤程…

3. Spring Cloud Eureka 服务注册与发现(超详细说明及使用)

3. Spring Cloud Eureka 服务注册与发现(超详细说明及使用) 文章目录 3. Spring Cloud Eureka 服务注册与发现(超详细说明及使用)前言1. Spring Cloud Eureka 的概述1.1 服务治理概述1.2 服务注册与发现 2. 实践&#xff1a;创建单机 Eureka Server 注册中心2.1 需求说明 图解…

2024年11月第2个交易周收盘总结

计划自己的交易&#xff0c;交易自己的计划! 跟随市场而情绪波动&#xff0c;最终一定会导向失败&#xff01;连续、平稳、冷静地惯彻交易计划&#xff0c;比什么都重要&#xff01; 交易本身是极其简单和清楚的&#xff0c;让事情变复杂的原因不是行情走势和交易本身&#x…