Mysql事务—隔离级别—脏读、不可重复读、幻读-遥遥领先版

news2024/12/23 10:43:55

事务的基本概念

事务就是一组原子性的操作,这些操作要么全部发生,要么全部不发生。事务把数据库从一种一致性状态转换成另一种一致性状态。

事务最经典也经常被拿出来说例子就是转账了。

假如小明要给小红转账1000元,这个转账会涉及到两个关键操作就是:将小明的余额减少1000元,将小红的余额增加1000元。万一在这两个操作之间突然出现错误比如银行系统崩溃,导致小明余额减少而小红的余额没有增加,这样就不对了。事务就是保证这两个关键操作要么都成功,要么都要失败。

  • 原子性:事务是数据库的逻辑工作单位,事务中包含的各操作要么都做,要么都不做

  • 一致性:事务执行的结果必须是使数据库从一个一致性状态变到另一个一致性状态。因此当数据库只包含成功事务提交的结果时,就说数据库处于一致性状态。如果数据库系统运行中发生故障,有些事务尚未完成就被迫中断,这些未完成事务对数据库所做的修改有一部分已写入物理数据库,这时数据库就处于一种不正确的状态,或者说是不一致的状态。

  • 隔离性:一个事务的执行不能其它事务干扰。即一个事务内部的/操作及使用的数据对其它并发事务是隔离的,并发执行的各个事务之间不能互相干扰。

  • 持久性:也称永久性,指一个事务一旦提交,它对数据库中的数据的改变就应该是永久性的。接下来的其它操作或故障不应该对其执行结果有任何影响。

事务隔离级别

  • Read Uncommitted(读取未提交内容)

在该隔离级别,所有事务都可以看到其他未提交事务的执行结果。本隔离级别很少用于实际应用,因为它的性能也不比其他级别好多少。读取未提交的数据,也被称之为脏读(Dirty Read)。

存在脏读问题,A用户开启事务修改数据,在修改完未提交的时候,B用户查询了这条数据,查到的修修改了未提交的数据,如果这个时候A用户因为某种原因回滚了,B就拿到了脏数据。

简单点说就是读取到了未提交的数据。

  • Read Committed(读取提交内容)

这是大多数数据库系统的默认隔离级别(但不是MySQL默认的)。它满足了隔离的简单定义:一个事务只能看见已经提交事务所做的改变。这种隔离级别会导致所谓的不可重复读(Nonrepeatable Read),因为同一事务的其他实例在该实例处理其间可能会有新的commit,所以同一select可能返回不同结果。存在的问题:不可重复

解决了脏读问题

但存在不可重复读问题,A用户在开启事务,查询完第一个select后,B用户对这一行数据进行更新并提交,A用户执行了和第一次一样的sql语句,发现查询出的数据和第一次不一样。

  • Repeatable Read(可重读)

这是MySQL的默认事务隔离级别,它确保同一事务的多个实例在并发读取数据时,会看到同样的数据行。不过理论上,这会导致另一个棘手的问题:幻读(Phantom Read)。

解决了不可重复读问题

但存在幻读问题,假设我们要为state为VA的客户发放积分,假设满足VA只有一个用户,用户A先开启事务执行查询语句,只查到了一个用户,在提交之前,用户B执行了更新语句并进行提交,这个时候数据库中有两个VA用户了,但A用户只能查到一个,因为可重复读,执行的结果都是一样的,只有当A用户提交之后再查,才能查到2个用户。

  • Serializable(串行化)

通过强制事务排序,使之不可能相互冲突,从而解决幻读问题。简言之,它是在每个读的数据行上加上共享锁。在这个级别,可能导致大量的超时现象和锁竞争。

那可串行化是如何解决幻读问题的呢?

当用户B开启事务,执行完更新语句,提交之前,用户A开启事务,进行查询,这时候会转圈圈,也就是阻塞等待,他会意识到有其他人在更新这个表,我要再等等,当用户B提交了之后,用户A就可以查询出新增的这条记录了。

MySQL默认采用的REPEATABLE_READ隔离级别,Oracle默认采用的READ_COMMITTED隔离级别

事务隔离机制的实现基于锁机制和并发调度。其中并发调度使用的是MVCC(多版本并发控制),通过保存修改的旧版本信息来支持并发一致性读和回滚等特性。

因为隔离级别越低,事务请求的锁越少,所以大部分数据库系统的隔离级别都是READ-COMMITTED(读取提交内容),但是你要知道的是InnoDB存储引擎默认使用REPEATABLE-READ并不会有任何性能损失。

脏读、不可重复读、幻读

脏读是指一个事务读取到了其他事务没有提交的数据

不可重复读是指一个事务内多次根据同一个查询条件查询出来的同一行记录的值不一样(update)

幻读是指一个事务内多次根据同个条件查出来的记录行数不一样(insert:插入意向锁; delete: record lock)

INNODB 在RR级别如何解决幻读

在快照读情况下,mysql通过mvcc来避免幻读。

在当前读情况下,mysql通过next-key来避免幻读。

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

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

相关文章

Java全栈开发前端+后端(全栈工程师进阶之路)-环境搭建

在课程开始前我们要配置好我们的开发环境,这里我的电脑太乱了,我使用vm虚拟机进行搭建开发环境,如果有需要环境的或者安装包,可以私信我。 那我们开始 首先我们安装数据库 这里我们使用小皮面板 小皮面板(phpstudy) - 让天下没…

【一刷《剑指Offer》】面试题 11:数值的整数次方

力扣对应题目链接:50. Pow(x, n) - 力扣(LeetCode) 牛客对应题目链接:数值的整数次方_牛客题霸_牛客网 (nowcoder.com) 一、《剑指Offer》内容 二、分析题目 【快速幂 递归】 当指数 n 为负数时,我们可以计算 x^(−…

大模型应用开发极简入门

简单的归纳一下书的前序部分 目录 LLM(Large Language Model)的应用技术栈通常包括以下几个方面: 深度学习框架: 数据预处理工具: 训练资源: 模型优化和调参工具: 部署和应用集成&#xf…

基于Vue3的Axios异步请求

基于Vue3的Axios异步请求 1. Axios安装与应用2. Axios网络请求封装3. axios网络请求跨域前端解决方案server.proxy 1. Axios安装与应用 Axios是一个基于promise的网络请求库,Axios.js.中文文档:https://axios.js.cn/ 安装:npm install --sa…

链表之两数相加

两数相加 题目: 给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。 请你将两个数相加,并以相同形式返回一个表示和的链表。 你可以假设除了数字 0 之外&am…

简单几步!新手开抖店如何快速上手?看这一篇就够了!

大家好,我是电商花花。 很多新手卖家在做抖音小店的时候都是0基础的小白,在开好店铺之后却不知道如何下手。 那么今天花花就来跟 大家分享一下我们是怎么做抖音小店,怎么做店铺运营的,如果你作为一个刚开店的新手,一…

Java的逻辑控制和方法的使用介绍

前言 程序的逻辑结构一共有三种:顺序结构、分支结构和循环结构。顺序结构就是按代码的顺序来执行相应的指令。这里主要讲述Java的分支结构和循环结构,由于和C语言是有相似性的,所以这里只会提及不同点和注意要点~~ 注意在C语言中,…

MobileNetV4 论文学习

论文地址:https://arxiv.org/abs/2404.10518 代码地址:https://github.com/tensorflow/models/blob/master/official/vision/modeling/backbones/mobilenet.py 解决了什么问题? 边端设备的高效神经网络不仅能带来实时交互的体验&#xff0c…

Linux服务器安全基础 - 查看入侵痕迹

1. 常见系统日志 /var/log/cron 记录了系统定时任务相关的日志 /var/log/dmesg 记录了系统在开机时内核自检的信息,也可以使用dmesg命令直接查看内核自检信息 /var/log/secure:记录登录系统存取数据的文件;例如:pop3,ssh,telnet,ftp等都会记录在此. /var/log/btmp:记…

XYCTF 2024

Web 参考博客:https://www.yuque.com/yunzhiyunweiji/wrgkex/rfpnkn0293l7cp09#ezMake ezhttp Via - HTTP | MDN 代理那里难住了 XFF不给用可以用client-ip ezmd5 让我们上传图片并比较,结合题目名可以猜测应该是比较两个图片的md5值是否相同&…

实锤!腾讯终于拥抱鸿蒙生态,微信鸿蒙原生版本即将上线

大家都知道,目前已知纯血鸿蒙星河版next将于今年6月份开启Bate版本的测试,也就是说原生鸿蒙系统快上线了。而目前对于鸿蒙生态的发展,大家最关心的恐怕只有腾讯系的微信和QQ是否适配了纯血鸿蒙系统。甚至有网友表示,微信不适配鸿蒙…

上海计算机学会2020年9月月赛C++丙组T2中心对称数

题目背景 在超市里,有一些价格标签倒置后,数字竟不会发生改变。转置 180 度后不变的十进制数字被称为中心对称数(Strobogrammatic Numbers)。下图分别给出 0 到 9 这十个数字倒置后的样子: 题目描述 中心对称数是指沿…

npm 安装 pnpm 时 报错 npm ERR! Unexpected token ‘.‘

问题 一个项目用的是 pnpm 安装的依赖,node 的版本是 16.16.0,nvm 的版本是 1.1.7,然后全局安装 pnpm 报错如下: 解决 我看网上的一些解决方案是说 nvm 版本过低导致,下面我们按照这个方向处理。 实首先下载 nvm-up…

第三节课,功能2:开发后端用户的管理接口--http client -- debug测试

一、idea 中 Http client 使用 二、测试步骤,先进入主程序 2.1 先run ,再debug 2.2 再进入想要测试的代码 2.2.1 进入测试的接口 三、程序逻辑 1)用户注册逻辑:如果用户不存在再后端,看用户名&密码&校验码是…

制造企业如何打造客户服务核心竞争力?[AMT企源典型案例]

引言 产品同质化严重,竞争的焦点从产品转向服务,企业的管理模式也要相应转变。那么如何打造围绕服务的核心竞争力?相信以下案例会给大家一些启发。 项目背景: 售后服务在市场竞争中的作用凸显 A公司是一家医疗器械生产制造企业…

揭秘商业新宠——消费全返模式:深度剖析与实战策略

大家好,我是微三云周丽! 在当今竞争激烈的商业环境中,创新已成为企业生存和发展的关键。在众多新型商业模式中,消费全返模式凭借其独特的魅力,吸引了众多商家的目光。本文将从消费全返模式的定义、特点、应用场景、成…

蚂蚁集团智能凭证安全产品通过信通院能力测评,获最高评级

4月28日,中国信通院“人工智能”高质量发展研讨会在北京召开。会上,中国信通院发布“可信AI”系列评测结果。蚂蚁集团智能凭证防伪检测安全产品“蚂蚁光鉴”全项通过“可信AI-OCR服务智能化”的评估,获得最高评级(增强级&#xff…

数字电路-5路呼叫显示和8路抢答器

本内容涉及两个电路,分别为5路呼叫显示电路和8路抢答器电路,包含Multisim仿真原文件,为掌握FPGA做个铺垫。紫色文字是超链接,点击自动跳转至相关博文。持续更新,原创不易! 目录: 一、5路呼叫显…

Redis的事务机制能保证ACID属性吗?

目录 事务 ACID 属性 用户如何开启Redis的事务? 使用redis-cli客户端来展示 ​Go语言编码使用事务 Redis 的事务机制能保证哪些属性? 1. 原子性 语法错误 运行错误 执行EXEC时,Redis发生故障 Redis对事务原子性属性的保证情况 2. 一…

图论单源最短路径——spfa

【模板】单源最短路径(弱化版) 本题用的spfa 题目背景 本题测试数据为随机数据,在考试中可能会出现构造数据让SPFA不通过,如有需要请移步 P4779。 题目描述 如题,给出一个有向图,请输出从某一点出发到…