# MySQL 出现脏读的原因及解决方案
## 1. 流程图
```mermaid
journey
title MySQL 脏读流程
section 甲方(读取者)
甲方->>MySQL: 开始读取数据
MySQL-->>甲方: 返回数据
section 乙方(修改者)
乙方->>MySQL: 开始修改数据
原创
2024-04-30 07:49:13
40阅读
在我们平时经常用到的sql更新语句,之前是认为只要sql执行,当前sql的操作会立马执行到服务器磁盘上并返回,但是后来我才知道,事实并非如此,在了解事实之前,首先可能需要先了解什么是redo log,什么是buffer pool,什么是changebuffer以及数据页。。 首先,我们用一种比喻的手法,将MySQL比喻成一个古代的饭馆,很多客户都需要在“饭馆”进行消费,如果有客户来还账或者是
转载
2023-08-23 16:57:11
71阅读
脏页:内存数据页跟磁盘上数据页内容不一致,将内存页称为脏页干净页:内存数据写入磁盘后,内存页跟磁盘页数据一致,称内存页为干净页 刷脏页的俩种情况:1、redo log满了,这时候系统不能再接受更新了,所有的更新都必须堵住,这时候的更新数为02、内纯不够用了,要先将脏页写到磁盘。这种情况是常态innodb用缓冲池(buffer pool)管理内存,缓冲池中的内存页有三种状态:还有没使用的;
转载
2023-06-23 12:03:26
177阅读
1 锁问题通过锁机制可以实现事务的隔离性要求,使得事务可以并发地工作。锁提高了并发,但是也有有潜在的问题。不过好在因为事务隔离性的要求,锁只会带来三种问题,如果可以防止这三种情况的发生,将不会产生并发异常。1.1 脏读先了解脏数据,脏页,脏读。脏页 指的是在缓冲池中已近被修改的页,但是还没有刷新到磁盘中,即数据库实例内存中的页和磁盘中的页数据是不一致的,当然在刷新到磁盘之前,日志都已经被
转载
2023-10-02 08:42:49
706阅读
1、数据脏读 事务a修改了某条数据,然后事务b读取了事务a修改的该条数据,然后事务a由于某些原因,事务a回滚了,这样事务b读到的数据就和回滚的数据不同了,这时事务b读取的数据就是脏数据。概况一句话就是一个事务读取了另一个事务未提交的数据。2、数据幻读 事务a按一定条件读取了该表的一些数据,然后事务b想该表插入了一些满足事务a查询条件的数据,当事务a再次以相同条件查询数据时,会发现多出来一些数据,就
转载
2023-08-06 00:15:47
146阅读
意思是 当数据库数据更新时,redis中的缓存数据和数据库中的数据怎么保存一致; 第一种方案:先更新再删除缓存。缺点:先更新,其他线程来拿数据会产生脏数据,而且可能会重复阐述缓存第二种方案: 先删除缓存再更新。缺点:删除缓存之后,在更新期间如果其他线程要来取数据,发现缓存没了,去数据库取旧值,再更新到缓存里面。这样会产生脏数据,并且产生脏数据之后,之后取得一直是脏数据。 两种方
转载
2023-11-26 16:41:44
52阅读
Mysql数据库中的"脏读"是指一个事务读取了另一个事务未提交的数据。换句话说,如果事务A读取了事务B尚未提交的数据,而事务B最终回滚了,那么事务A读取的数据就是脏数据。 示例代码如下: 首先,创建一个测试表users:sqlCopy codeCREATE TABLE `users` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varcha
转载
2024-06-13 09:10:19
32阅读
数据库事务的隔离级别有4种,由低到高分别为Read uncommitted(读未提交) 、Read committed(读已提交) 、Repeatable read(重复读) 、Serializable(串行化读) 。而且,在事务的并发操作中可能会出现脏读,不可重复读,幻读。下面通过事例一一阐述它们的概念与联系。1 脏读、不可重复读、幻象读概念1.1 脏读脏读:指当一个事务正在
转载
2023-12-25 12:39:29
216阅读
一、什么是事务 在MySQL中,事务是一种机制、一个操作序列,是访问和更新数据库的程序执行单元。事务中包含一个或多个数据库操作命令,会把所有的命令作为一个整体一起向系统提交或撤销操作请求,即这一组数据库命令要么都执行,要么都不执行。二、操作事务的方法 三、执行事务的基本五步该事例是模
转载
2023-09-22 10:14:12
121阅读
mysql 第三讲事务就是要保证一组数据库操作,要么全部成功,要么全部失败。在MySQL中,事 务支持是在引擎层实现的。MySQL是一个支持多引擎的系统,但并不是所有的引擎都支持事务。比如MySQL原生的MyISAM引擎就不支持事务,这也是MyISAM被InnoDB取代 的重要原因之一。ACID原子性、一 致性、隔离性、持久性。隔离性为了解决脏读,幻读,不可重复读。脏读:原本的数据比较干净、纯粹,
转载
2023-12-31 13:40:00
46阅读
脏读: 就是A向B 转账100块,A只填写的转账的信息,并截图发给B, 但是没有点确认转账。B 看到A 发过来的填写转账信息,说好的,但是此时查询账户的时候,还是原来的余 额,并没有收到A 的转账,因为A 只是填了转账信息,并没有递交或者是确认转账。不可重复读: 就是 A 向B 转账100块,并点了确认转账,这个信息是提交了的,那么B 在A 通知之前和之后,执行查询自己账户的这个操作是,前后的账户
转载
2023-10-16 16:41:46
126阅读
1. 请简洁地描述下MySQL中InnoDB支持的四种事务隔离级别名称,以及逐级之间的区别?答:SQL标准定义的四个隔离级别为:read uncommited,read committed,repeatable read,serializable; 不同的隔离级别有不同的现象。主要有下面3种现在:1、脏读(dirty read):一个事务可以读取另一个尚未提交事务的修改数据。2、非重复读
转载
2023-10-27 09:28:00
88阅读
文章目录一、MySQL有关权限的表二、锁1、全局锁:2、表级锁:3、行锁:4、死锁和死锁检测三、幻读、脏读1、幻读1)什么是幻读2)产生幻读的原因3)解决幻读方式2、脏读1)脏读(Dirty Read)2)刷脏页(1)什么时候刷呢(2)四种场景对性能的影响(3)InnoDB 刷脏页的控制策略四、加锁规则五、数据库表的空间回收1、nnodb_file_per_table2、数据页的复用及空洞3、重
转载
2024-05-31 14:19:44
44阅读
前言以下内容是作者在网上搜集和自己总结而来。一、基本概念MySQL 事务都是指在 InnoDB 引擎下,MyISAM 引擎是不支持事务的。事务具有原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability)四个特性,简称 ACID,缺一不可。今天要说的就是隔离性。1.1 脏读脏读指的是读到了其他事务未提交的数据,未提交意味着这些数据可
转载
2023-11-23 11:39:32
154阅读
脏读就是指当一个事务正在访问数据,并且对数据进行了修改,而这种修改还没有提交到数据库中,这时,另外一个事务也访问这个数据,然后使用了这个数据。因为这个数据是还没有提交的数据,那么另外一个事务读到的这个数据是脏数据,依据脏数据所做的操作可能是不正确的。 (百度百科)脏读:脏读是读到了别的事务回滚前的脏数据。比如事务B执行过程中修改了数据X,在未提交前,事务A读取了X,而事务B却回滚了,这样事务A就形
转载
2023-07-31 16:32:06
162阅读
1. 脏读、幻读、不可重复读脏读 :是指事物读取到其他事务没提交的数据client1 开启事务查询了 id = 1 的数据,然后它跑去做别的事情(未提交),这时 client2对 id = 1 的数据进行了修改,然后他也跑去做别的事情(未提交),这时 client1 回来又查询了 id = 1 的数据,发现被改变了???然后带着疑惑又去做别的事情,client2 那边因为某个原因对 id = 1
转载
2024-04-16 15:51:55
149阅读
首先我们要知道,我们的脏读、幻读、不可重复读这些概念是在事务中的概念。脏读:也就是读取了未提交的数据,比如我开启了一个事务A,在里面操作一个用户表,获取里面一个用户的积分(比如此时这个用户的积分是100),此时有另外一个事务B也操作了这个用户表,把这个用户的积分减少了10,这个用户积分变成了90,但是还没有提交事务哦,但是在事务A里面获取这个用户的积分的时候,结果就是90,这就是脏读,在事务A里面
转载
2023-10-27 07:06:18
74阅读
目录脏读(Dirty Read)不可重复读幻读幻读和不可重复读的区别不可重复读幻读 脏读(Dirty Read)脏读是指当一个事务A正在访问数据,并且对数据进行了修改,而这种修改还没有提交到数据库中,这时,另外一个事务B也访问这个数据,并使用了这个数据。结果事务A进行了事务回滚,那么事务B读取的数据就是脏读。 张三的工资为5000,事务A进行了update操作把他的工资改为80
转载
2024-06-22 18:50:55
46阅读
目录MySQL 中事务的隔离1.READ UNCOMMITTED2.READ COMMITTED3.REPEATABLE READ4.SERIALIZABLE前置知识1.事务相关的常用命令2.MySQL 8 之前查询事务的隔离级别3.MySQL 8 之后查询事务的隔离级别4.查看连接的客户端详情5.查询连接客户端的数量6.设置客户端的事务隔离级别7.新建数据库和测试数据8.名称约定脏读1.脏读演示
转载
2023-12-05 18:43:59
128阅读
背景:机房级掉电演练,机房1的Redis集群被下电,现网集群没有开启持久化,靠双活机房数据实时同步做数据可靠性方案,机房1的集群恢复后,需要先恢复机房2到机房1的实时同步(增量),然后通过脚本执行存量数据全量同步,由于机房1为空集群,所以为了提升全量数据同步性能,一般不要求加--replace参数,即对端已有数据会被丢弃不同步。问题:机房1主集群数据恢复后,业务请求从机房2的Redis集群切回到机
转载
2023-06-02 15:46:50
134阅读