mysql 并没有幻读_MySQL默认隔离级别REPEATABLE-READ并没有解决幻读问题
刷脉脉,发现一个帖子讨论幻读问题:
https://maimai.cn/web/gossip_detail?src=app&webid=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJlZ2lkIjoiN2JmMjA4ZDZjNzU0MTFlYWExOTk4MDE4NDRlNTAxOTAiLCJ1IjoyMjM0MjgzMTksImlkIjoyNjc0NDU3OH0.yvtEe5Z1vjtmPE5dBwXVqD-pMWBE2--jDQuRARcWArI
固做一下实验,演示下MySQL默认隔离级别REPEATABLE-READ并没有解决幻读问题
幻读演示
MySQL默认隔离级别REPEATABLE-READ(可重复读)会话一会话二
MySQL [test]> select * from t1;
+------+
| id |
+------+
| 1 |
| 2 |
| 3 |
| 4 |
+------+
4 rows in set (0.000 sec)MySQL [test]> select * from t1;
+------+
| id |
+------+
| 1 |
| 2 |
| 3 |
| 4 |
+------+
4 rows in set (0.000 sec)
MySQL [test]> begin;
Query OK, 0 rows affected (0.000 sec)
注:开启事务一MySQL [test]> begin;
Query OK, 0 rows affected (0.000 sec)
注:开启事务二
MySQL [test]> insert into t1 values(5);
Query OK, 1 row affected (0.000 sec)
MySQL [test]> select * from t1;
+------+
| id |
+------+
| 1 |
| 2 |
| 3 |
| 4 |
| 5 |
+------+
5 rows in set (0.000 sec)
注:插入一条数据5MySQL [test]> select * from t1;
+------+
| id |
+------+
| 1 |
| 2 |
| 3 |
| 4 |
+------+
4 rows in set (0.000 sec)
注:因会话一未提交,所以在会话二事务里是看不见更改后的结果的
MySQL [test]> commit;
Query OK, 0 rows affected (0.002 sec)
注:会话一执行事务提交
MySQL [test]> select * from t1;
+------+
| id |
+------+
| 1 |
| 2 |
| 3 |
| 4 |
+------+
4 rows in set (0.000 sec)
MySQL [test]> update t1 set id = id+10;
Query OK, 5 rows affected (0.001 sec)
Rows matched: 5 Changed: 5
Warnings: 0
注:执行全表更新,id+10
MySQL [test]> select * from t1;
+------+
| id |
+------+
| 11 |
| 12 |
| 13 |
| 14 |
| 15 |
+------+
5 rows in set (0.000 sec)
注:当再次查看时,此时发现有5条数据被更改,产生幻读
MySQL [test]> select version();
+-----------+
| version() |
+-----------+
| 8.0.21 |
+-----------+
1 row in set (0.000 sec)
在MySQL默认隔离级Repeatable Read下,刚才的操作,在会话二未提交的事务里,
会莫名其妙地看到第5条数据,这种现象称为幻读。
固只能通过select ... for update才能避免幻读。
mysql 并没有幻读_MySQL默认隔离级别REPEATABLE-READ并没有解决幻读问题相关推荐
- mysql 脏读 不可重复读 幻读_mysql事务隔离级别/脏读/不可重复读/幻读详解
一.四种事务隔离级别 1.1read uncommitted 读未提交 即:事务A可以读取到事务B已修改但未提交的数据. 除非是文章阅读量,每次+1这种无关痛痒的场景,一般业务系统没有人会使用该事务隔 ...
- Mysql默认隔离级别为什么是可重复读?
知识点总结 1.数据库默认隔离级别: mysql -可重复读: oracle,postgres -已提交读 2.mysql binlog的格式三种:statement,row,mixed 3.为什么m ...
- mysql ansi sql标准_Mysql数据库隔离级别(ANSI SQL92规范,行锁,间隙锁)
一. 什么是数据库隔离级别? ANSI(美国国家标准学会:AMERICAN NATIONAL STANDARDS INSTITUTE)在多个事务并发的时候能够正确的处理数据所定义的规范.事务隔离级别越 ...
- mysql 事务隔离级别实现原理_MySQL事务隔离级别和实现原理 - 米扑博客
开发中经常提到数据库的事务,那你知道数据库还有事务隔离的说法吗, 事务隔离还有隔离级别,那什么是事务隔离,隔离级别又是什么呢? MySQL 事务 本文所说的 MySQL 事务都是指在 InnoDB 引 ...
- [转]为什么mysql默认隔离级别设置为可重复读
一般的DBMS系统,默认都会使用读提交(Read-Comitted,RC)作为默认隔离级别,如Oracle.SQLServer等,而MySQL却使用可重复读(Read-Repeatable,RR).要 ...
- mysql 事务隔离规范_MySQL事务隔离级别以及脏读、幻读、不可重复读示例
事务的隔离性 MySQL是一个客户端/服务器架构的软件,对于同一个服务器来说,可以有若干个客户端与之连接,每个客户端与服务器连接上之后,就可以称之为一个会话(Session).每个客户端都可以在自己的 ...
- MySQL不可读举例_MySQL事务隔离级别与相关示例(脏读、不可重复读、幻读)
目录 MySQL8中隔离级别的变量跟之前的版本不一样,之前是tx_isolation,MySQL8改成了transaction_isolation.查看当前隔离级别的命令是 mysql> sel ...
- mysql rr解决幻读吗_mysql rr隔离级别解决幻读了吗
以下内容全部基于innodb. 虽然下面有很多概念很浅显,但还是要解释一下 什么是幻读? 当一个事务在多次查询中,发现了一行不是在当前事务中添加的数据.出现这种问题就叫做幻读. 关于四种隔离级别 未提 ...
- mysql 默认事务隔离级别_MySQL 事务隔离级别详解
个人公众号『码农札记』,欢迎关注,查看更多精彩文章. 简介: MySQL的事务隔离级别一共有四个,分别是读未提交.读已提交.可重复读以及可串行化. 四个特性ACID 原子性 (Atomicity) 事 ...
最新文章
- 中兴高达和中兴啥关系_41家通信传输设备公司研发投入排名:中兴通讯、烽火通信最敢投...
- AutoCAD如何输入文字
- pycharm debug 断点调试
- SAP CRM产品主数据应用里value node和model node的转换
- python安装matlabb库_Python调用MATLAB的方法(mlab接口库)(未总结)-Go语言中文社区...
- 计算机网络:如何传输一条数据(详解)
- Linux 下wifi 驱动开发(二)—— WiFi模块浅析
- TIOBE 11 月编程语言排行榜:C 逼近 Java,Swift 进入 Top 10
- OpenFlow网络中处理正常流量的工作流程
- 网页编辑PHP变量,编辑文件中的php代码和变量
- 蓝桥杯 BASIC-13 基础练习 数列排序
- rabbitMq多个队列多种任务同时监听
- opencv.js调用摄像头(Electron环境)
- 风云2号卫星云图_中国为什么要发这么多卫星?答案没有出乎意料
- php codesniffer 安装,phpstorm安装PHP_CodeSniffer
- Windows8[Web应用程序项目***已配置为使用IIS。无法访问IIS元数据库,您没有足够的特权访问计算机上的IIS网站]
- 最凄美的爱情故事,让每对爱人更长久的文章!!
- 人力资源外包(HRO)服务市场现状研究分析-
- Android studio真机调试(用小米10s为例)
- MySQL数据库备份练习