MySQL中脏读与幻读

一般对于我们的业务系统去访问数据库而言,它往往是多个线程并发执行多个事务的,对于数据库而言,它会有多个事务同时执行,可能这多个事务还会同时更新和查询同一条数据,所以这里会有一些问题需要数据库来解决

我们来看看,如果多个事务要是对缓存里的同一条数据同时进行更新或者查询,此时会产生哪些问题呢?这里实际上会涉及到脏写、脏读、不可重复读、幻读四种问题。

MySQL中的事务隔离级别:

13.1.读未提交(READ UNCOMMITTED)
13.2.读已提交(READ COMMITTED)
13.3.可重复读(REPEATABLE READ)
13.4.序列化(SERIALIZABLE)

MySQL默认的事务隔离级别是可重复读(REPEATABLE READ),这4种隔离级别的说明如下:

1.READ UNCOMMITTED
读未提交,也叫未提交读,该隔离级别的事务可以看到其他事务中未提交的数据。
该隔离级别因为可以读取到其他事务中未提交的数据,而未提交的数据可能会发生回滚,
因此我们把该级别读取到的数据称之为脏数据,把这个问题称之为脏读

2.READ COMMITTED
读已提交,也叫提交读,该隔离级别的事务能读取到已经提交事务的数据,因此它不会有脏读问题。
但由于在事务的执行中可以读取到其他事务提交的结果,所以在不同时间的相同 SQL 查询中,可能会得到不同的结果,
这种现象叫做不可重复读

3.REPEATABLE READ
可重复读,是MySQL 的默认事务隔离级别,它能确保同一事务多次查询的结果一致。
但也会有新的问题,比如此级别的事务正在执行时,另一个事务成功的插入了某条数据,但因为它每次查询的结果都是一样的,
所以会导致查询不到这条数据,自己重复插入时又失败(因为唯一约束的原因)。
明明在事务中查询不到这条信息,但自己就是插入不进去,这就叫幻读 (Phantom Read)。

脏写

数据库里面有一个数据值为null,此时第一个线程将他修改为了A,这时候第二个事务来了,在内存页将它修改成了B。此时A突然回滚了,值成了最开始log里面记录的null,第二个线程丢改的值丢失了,这就叫脏写

数据库里面有一个数据值为null,此时第一个线程将他修改为了A,这时候第二个事务来了,在内存页查出来了这个A值。此时A突然回滚了,这个时候第二个线程的业务需要再查询一次,得到的却是null值,就很有可能影响之前的业务逻辑,这就是脏读

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

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

相关文章

centos 7使用源码编译安装Python 3.12.2(最新版本)

(一)、说明 在centos 7上,默认安装出来的python是:2.7.5版本 1.查看python版本: python --version 2.通过yum安装出来的,适合当前操作系统的,最新的python版本是:3.6.8 python3…

python代码实现KNN对鸢尾花的分类

一、KNN模型-KNeighborsClassifier() 1.1 导入sklearn第三方库 from sklearn import datasets #sklearn的数据集 from sklearn.neighbors import KNeighborsClassifier #sklearn模块的KNN类我们使用一个叫作鸢尾花数据集的数据,这个数据集里面有 150 条数据&#…

身份证实名认证接口守护账号安全、实名认证接口Java开发示例

身份证实名认证接口就是网民账号的贴身保镖,只需简单几步操作,即可实现高效、精准的身份验证,从此告别信息泄露的恐慌!无论是线上交易、社交互动还是各类服务注册,都能确保你是独一无二的你! 翔云身份证实…

IP Transit作为一种网络服务

IP Transit作为一种网络服务,通过BGP(边界网关协议)对接,将用户的IP地址段与全球互联网进行连接,实现用户自有IP地址段在全球互联网的穿透。这种服务在中国境外,特别是在AS4837/AS10099网络平台上得到了广泛…

云手机对出海企业有什么帮助?

近些年,越来越多的企业开始向海外拓展,意图发掘更广阔的市场。在这过程中,云手机作为一个新型工具为很多企业提供了助力,尤其在解决海外市场拓展过程中的诸多挑战方面发挥着作用。 首先,云手机的出现解决了企业在海外拓…

【Linux系统化学习】死锁 | 线程同步

目录 死锁 死锁的必要条件 避免死锁 线程同步 条件变量 同步概念和竞态条件 条件变量接口 创建和初始化条件变量 等待条件满足 唤醒等待 毁条件变量 为什么 pthread_cond_wait 需要互斥量? 条件变量使用规范 等待条件代码 给条件发送信号代码 死锁 死锁是指在一…

扭蛋机小程序带来了什么优势?扭蛋机收益攻略

在当下的潮流消费时代,人们对潮玩也日益个性化,扭蛋机作为一种新型的娱乐消费模式,深受大众喜爱。扭蛋机的价格低,各个年龄层的玩家都可以进行购买,潜在玩家量非常大。扭蛋机商品主打热门IP周边等,种类繁多…

SQL注入攻击:原理与防御策略

SQL注入攻击:原理与防御策略 目录 SQL注入攻击:原理与防御策略 一、SQL注入简介 二、攻击语句原型 三、技术分析与深度挖掘 四、防御策略与最佳实践 五、案例研究与实际应用 一、SQL注入简介 定义与原理 SQL注入是一种攻击技术,通过在…

作为领导,员工不听你的安排怎么办?

很多新晋的技术领导者,最头痛的问题莫过于员工不执行你安排的任务,甚至最后还得自己亲自动手上。 作为领导,面对员工不执行你安排的任务,不要抱怨、更不要责骂员工,这些都无助于解决问题,甚至会变得更糟糕…

【PostgreSQL】Postgres数据库安装、配置、使用DBLink详解

目录 一、技术背景1.1 背景1.2 什么是 DBLink 二、安装配置 DBLink2.1 安装 DBLink2.2 配置 DBLink1. 修改 postgresql.conf2. 修改 pg_hba.conf 三、DBLink 使用3.1 数据准备3.2 DBLink 使用1. 创建 DBLink 连接2. 使用 DBLink 进行查询3. 使用 DBLink 进行增删改4. 使用 DBLi…

python代码实现kmeans对鸢尾花聚类

导入第三方库和模型 from sklearn import datasets import numpy as np import matplotlib.pyplot as plt from sklearn.cluster import KMeans2、创建画图函数 def draw_result(train_x, labels, cents, title):n_clusters np.unique(labels).shape[0]#获取类别个数color …

用vue3实现留言板功能

效果图&#xff1a; 代码&#xff1a; <script setup lang"ts"> import { ref } from vue;interface Message {name: string;phone: string;message: string; }const name ref<string>(); const phone ref<string>(); const message ref<st…

Llama 3 安装使用方法

Llama3简介&#xff1a; llama3是一种自回归语言模型&#xff0c;采用了transformer架构&#xff0c;目前开源了8b和70b参数的预训练和指令微调模型&#xff0c;400b正在训练中&#xff0c;性能非常强悍&#xff0c;并且在15万亿个标记的公开数据进行了预训练&#xff0c;比ll…

Go语言中,两个比较流行的缓存库

在 Go 中实现带有过期时间的缓存通常需要一个可以自动处理键值过期的缓存系统。虽然标准库中没有直接提供这种功能&#xff0c;但有几个流行的第三方库可以很好地满足这一需求。下面我会介绍两个比较流行的 Go 缓存库&#xff1a;go-cache 和 bigcache。 1. go-cache go-cache…

python——井字棋游戏——登入注册界面

本篇文章只讲解登入和注册页面&#xff0c;在后面的文章中会讲解井字棋游戏&#xff0c;然后把井字棋和登入界面进行连接&#xff0c;整合成一个完整的游戏。 登入注册界面在本篇文章的末尾。 1.实现登入界面 &#xff08;1&#xff09;导入图片 把这张图片存储在与代码路径…

Rundeck(四)安全配置

自动化运维工具rundeck GitHub - rundeck 是java开发的开源自动化服务&#xff0c;具有 Web 控制台、命令行工具和 WebAPI。它使您可以轻松地跨一组节点运行自动化任务&#xff0c;适合运维自动化管理、自动发布管理、运维数据分析等 网站&#xff1a;https://www.rundeck.co…

人人开源框架运行

Getting started renrenio/renren-fast-vue Wiki GitHub 人人开源 1.启动navicat&#xff1a;新建一个数据库renren-fast&#xff0c;字符集为utf-8,utf-8mb3或者utf-8mb4&#xff0c;排序规则不选 2.数据库操作在renren-fast数据库中选择表&#xff0c;运行renren-fast-ma…

LeetCode 每日一题 ---- 【1017.负二进制转换】

LeetCode 每日一题 ---- 【1017.负二进制转换】 1017.负二进制转换方法一&#xff1a;模拟进制转换推广&#xff1a;任意进制转换 1017.负二进制转换 方法一&#xff1a;模拟进制转换 我们平常做进制转换最常用的方法就是辗转相除法&#xff0c;下面的图示分别给出了普通的10…

电路板的EMC干扰源有哪些

电路板的EMC&#xff08;电磁兼容性&#xff09;干扰源主要包括以下几类&#xff1a; 自然干扰源&#xff1a;这些干扰源来自自然界&#xff0c;包括大气噪声干扰&#xff08;如雷电产生的火花放电&#xff09;、太阳噪声干扰&#xff08;由太阳黑子的辐射噪声引起&#xff09;…

web自动化测试详细流程和步骤

一、什么是web自动化测试 自动化&#xff08;Automation&#xff09;是指机器设备、系统或过程&#xff08;生产、管理过程&#xff09;在没有人或较少人的直接参与下&#xff0c;按照人的要求&#xff0c;经过自动检测、信息处理、分析判断、操纵控制&#xff0c;实现预期的目…