mysql 幻读,脏读和不可重复读

	MySQL的脏读、幻读和不可重复读是数据库事务处理中的三种常见问题,它们都涉及到数据的一致性和并发性。

一,脏读

脏读是指一个事务读取了另一个事务未提交的数据。这可能导致数据不一致的问题。
例如:
用户user1的初始balance是100,事务A减少了他的余额50,并进行其余的操作,但还未提交
同时
事务B正在读取user1的数据,读到他的balance为50
但是随后
可能其余的操作发生了某种错误,事务A回滚了,user1的余额现在还是100
那么事务B读到的user1的balance=50就是个脏读数据

-- 事务A
START TRANSACTION;
SELECT * FROM users WHERE id = 1; -- 假设此时用户1的balance数据为100
UPDATE users SET balance = balance - 50 WHERE id = 1;
********* 其余操作
COMMIT;-- 事务B
START TRANSACTION;
SELECT * FROM users WHERE id = 1; -- 此时用户1的balance数据为50,因为事务A已经修改了数据
COMMIT;                            

解决方案:
使用事务的隔离级别来避免脏读。MySQL提供了四种隔离级别:
READ UNCOMMITTED
READ COMMITTED
REPEATABLE READ
SERIALIZABLE
其中,READ UNCOMMITTED是最低的隔离级别,它允许脏读;而SERIALIZABLE是最高的隔离级别,它可以避免脏读、不可重复读和幻读。在创建事务时,可以通过以下命令设置隔离级别:

 
-- 设置隔离级别为READ UNCOMMITTED
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;

二,幻读

幻读是指一个事务在多次查询中返回了不一致的结果。例如,假设有两个事务C和D,C首先按照某个范围条件(如id>10 and id<20)查询了表中的数据,然后D在这个范围内插入了新的数据。当C再次查询这个范围时,它可能会发现多了一些新插入的数据。这就是幻读。
解决方案:
使用事务的隔离级别来避免幻读。与脏读类似,通过设置合适的隔离级别可以解决幻读问题。此外,还可以使用行级锁或表级锁来限制查询的范围,从而避免幻读的发生。

三,不可重复读

不可重复读是指在一个事务内,多次读取同一数据返回的结果不一致。这通常发生在一个事务内先进行了一次查询操作,然后又对该数据进行了更新操作,而另一个事务在此期间也对该数据进行了更新操作。当第一个事务再次读取该数据时,它读取到的是更新后的值,而不是初始值。这就是不可重复读。
例如:
事务A中读取user1的balance是100
同时
事务B更新的user1的balance是50,并提交成功了事务
然后
事务A又来读取user1的balance,结果是50,两次读取结果就不一致,导致了不可重复读。
解决方案:同样可以使用事务的隔离级别和行级锁来避免不可重复读。另外,MySQL还提供了一个特殊的锁——可重复读锁(Repeatable Read),它可以避免不可重复读的问题。要使用可重复读锁,可以在查询语句前加上FOR REPLICATE READ关键字

四,隔离级别

不同的隔离级别对并发问题的解决情况:

隔离级别 脏读 幻读 不可重复读 第一类丢失更新 第二类丢失更新
READ UNCOMMITED(读未提交) 允许 允许 允许 不允许 允许
READ COMMITTED(读已提交) 不允许 允许 允许 不允许 允许
REPEATABLE READ(可重复读) 不允许 允许 不允许 不允许 不允许
SERIALIZABLE (串行化) 不允许 不允许 不允许 不允许 不允许

隔离级别脏读幻读不可重复读
READ UNCOMMITED(读未提交)允许允许允许
READ COMMITTED(读已提交不允许允许允许
REPEATABLE READ(可重复读)不允许允许不允许
SERIALIZABLE (串行化)不允许不允许不允许

注意:事务的隔离级别和数据库并发性是成反比的,隔离级别越高,并发性越低。
在MySQL的InnoDB存储引擎中,REPEATABLE READ(RR)隔离级别通过多版本并发控制(MVCC)和一致性快照来实现非锁定读取,并防止幻读。

五,设置隔离级别

  1. 查看当前的用户隔离级别
select @@tx_isolation; 
  1. 修改当前登录用户的隔离级别
set session transaction isolation level read uncommitted;
  1. 修改全局的隔离级别需要使用root登录执行
set global transaction isolation level read uncommitted;

或者修改mysql.ini配置文件,在最后加上

[mysqld]
transaction-isolation = REPEATABLE-READ

其中可以选择隔离级别有:READ-UNCOMMITTED、READ-COMMITTED、 REPEATABLE-READ、SERIALIZABLE

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

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

相关文章

java项目之智慧图书管理系统设计与实现(springboot+vue+mysql)

风定落花生&#xff0c;歌声逐流水&#xff0c;大家好我是风歌&#xff0c;混迹在java圈的辛苦码农。今天要和大家聊的是一款基于springboot的智慧图书管理系统设计与实现。项目源码以及部署相关请联系风歌&#xff0c;文末附上联系信息 。 项目简介&#xff1a; 智慧图书管理…

SOCKET编程(5):IO复用

IO复用 多进程/线程并发模型&#xff0c;为每个sockets分配一个进程/线程 I/O&#xff08;多路&#xff09;复用&#xff0c;采用单个进/线程就可以管理多个socket I/O复用有3种方案&#xff1a; selectpollepoll select I/O多路复用详解 27、fd_set与FD_SETSIZE详解 详解…

新闻资讯微信小程序开发后端+php【附源码,文档说明】

博主介绍&#xff1a;✌IT徐师兄、7年大厂程序员经历。全网粉丝15W、csdn博客专家、掘金/华为云//InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;&#x1f3…

管理科学SCI、SSCI双检索,自引率低,无预警风险,对国人相当友好!

一、期刊名称 Journal of Organizational and End User Computing 二、期刊简介概况 期刊类型&#xff1a;SSCI 学科领域&#xff1a;管理学 影响因子&#xff1a;6.5 中科院分区&#xff1a;2区 出版方式&#xff1a;开放出版 版面费&#xff1a;$3300 三、期刊征稿范围…

探秘钱塘高中,筑梦未来之旅————杭州市钱塘高级中学

晨曦微露&#xff0c;书生琅琅&#xff0c;古韵今风交织在这方学府&#xff0c;滔滔的钱塘江畔&#xff0c;杭州市钱塘高级中学屹立于此。这所学校自1958年建校伊始&#xff0c;走过几十年的光辉岁月&#xff0c;一直致力于提供优质的教育资源。 近年来&#xff0c;学校获得多项…

Learning C# Programming with Unity 3D

作者&#xff1a;Alex Okita 源码地址&#xff1a;GitHub - badkangaroo/UnityProjects: A repo for all of the projects found in the book. 全书 686 页。

Java常见数据结构---八大结构

前言&#xff1a; 数据结构是计算机底层存储、组织数据的方式。是指数据相互之间是以什么方式排列在一起的。 通常情况下&#xff0c;精心选择的数据结构可以带来更高的运行或者存储效率 常见的八大数据结构&#xff1a; 栈&#xff1a; 思想&#xff1a; 栈是一种数据结构&…

大数据项目中的拉链表(hadoop,hive)

缓慢渐变维 拉链表 拉链表&#xff0c;可实现数据快照&#xff0c;可以将历史和最新数据保存在一起 如何实现: 在原始数据增加两个新字段 起始时间&#xff08;有效时间&#xff1a;什么时候导入的数据的时间&#xff09;&#xff0c;结束时间&#xff08;默认的结束时间为99…

运筹系列92:vrp算法包VROOM

1. 介绍 VROOM is an open-source optimization engine written in C20 that aim at providing good solutions to various real-life vehicle routing problems (VRP) within a small computing time. 可以解决如下问题&#xff1a; TSP (travelling salesman problem) CVRP …

九、 个人信息出境标准合同的签署及备案流程是怎样的?

为指导和帮助个人信息处理者规范有序备案个人信息出境标准合同&#xff0c;国家网信办结合此前备案实践经验发布了《标准合同备案指南&#xff08;第二版&#xff09;》&#xff0c;并就个人信息出境标准合同备案的适用范围、备案方式、备案流程和材料以及咨询、举报联系方式等…

F5 BIG-IP Next Central Manager SQL注入漏洞(CVE-2024-26026、CVE-2024-21793)

0x01 产品简介 BIG-IP Next Central Manager是BIG-IP Next的原生默认用户界面,它可跨平台管理BIG-IP Next实例。BIG-IP Next是F5 Networks公司推出的一款下一代BIG-IP软件,提供了多云应用安全和应用交付服务。 0x02 漏洞概述 CVE-2024-26026:BIG-IP Next Central Manager…

产品推荐 | 基于AMD Virtex 7 FPGA VC709 的高速连接功能开发板

01 产品概述 Virtex™ 7 FPGA VC709 连接功能套件是一款速率为 40Gb/s 的高速平台&#xff0c;您可以通过评估和开发连接功能&#xff0c;迅速为包含所有必要软硬件和 IP 核的高带宽和高性能应用提供强大的支持。它包括一个含有 PCI Express Gen 3、Northwest Logic 公司推出的…

4.1 文本相似度(二)

目录 1 文本相似度评估 2 代码 2.1 load_dataset 方法 2.2 AutoTokenizer、AutoModelForSequenceClassification 1 文本相似度评估 对两个文本拼接起来&#xff0c;然后作为一个样本喂给模型&#xff0c;作为一个二分类的任务&#xff1b; 数据处理的方式以及训练的基本流程…

c 指针基础

/* 指针练习*/ #include <stdio.h> #include <stdlib.h> void printAll(int n1, int n2, int *p1, int *p2); int main(){ //赋值操作语法演示 int num1 1111; int num2 2222; int *prt1 &num1; int *prt2 &num2; printAll(num1, num2, prt1…

maven .lastUpdated文件作用

现象 有时候我在用maven管理项目时会发现有些依赖报错&#xff0c;这时你可以看一下本地仓库中是否有.lastUpdated文件&#xff0c;也许与它有关。 原因 有这个文件就表示依赖下载过程中发生了错误导致依赖没成功下载&#xff0c;可能是网络原因&#xff0c;也有可能是远程…

平面设计基础指南:从零开始的学习之旅!

平面设计师主要做什么&#xff1f; 平面设计师通过创建视觉概念来传达信息。他们创造了从海报和广告牌到包装、标志和营销材料的所有内容&#xff0c;并通过使用形状、颜色、排版、图像和其他元素向观众传达了他们的想法。平面设计师可以在内部工作&#xff0c;专门为品牌创建…

Mac安装jadx

1、使用命令brew安装 : brew install jadx 输入完命令,等待安装完毕 备注&#xff08;关于Homebrew &#xff09;&#xff1a; Homebrew 是 MacOS 下的包管理工具&#xff0c;类似 apt-get/apt 之于 Linux&#xff0c;yum 之于 CentOS。如果一款软件发布时支持了 homebrew 安…

mac定时任务、自启动任务

https://quail.ink/mynotes/p/mac-startup-configuration-detailed-explanation <?xml version"1.0" encoding"UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.d…

【2024年5月备考新增】】 考前篇(2)《官方平台 - 考生模拟练习平台常用操作(一)》

软考考生常用操作说明 说明:模拟作答系统是旨在让考生熟悉计算机化考试环境和作答方式,模拟作答不保存考生作答 历史记录。考试题型、题量、分值、界面及文字内容以正式考试答题系统为准。 1 如何标记试题、切换试题 2 简答题如何查看历史记录、切换输入法 3 选做题,已作答…

游戏找不到steam_api64.dll如何解决,介绍5种简单有效的方法

面对“找不到steam_api64.dll&#xff0c;无法继续执行代码”的问题&#xff0c;许多游戏玩家或软件使用者可能会感到手足无措。这个错误提示意味着你的计算机系统在尝试运行某个游戏或应用程序时&#xff0c;无法定位到一个至关重要的动态链接库文件——steam_api64.dll&#…