MySQL可重复读应用场景_mysql-repeatable read 可重复读隔离级别-幻读实例场景
本文详解 repeatable read 可重复读 隔离级别产生的影响(幻读)
-- SERIALIZABLE serializable 序列化 ;一个个事务排成序列的形式。事务一个挨一个执行,等待前一个事务执行完,后面的事务才可以顺序执行
-- REPEATEABLE READ repeatable read 可重复读;安全上不如serializable,但是性能上比serializable强很多,但会造成幻读。隔离级别:导致幻读,同时开启两个事务,事务A和事务B,当事务A修改了数据,并且提交了,事务B此时查看不到事务A已经提交了的数据,这样保持事务B先后两次查询结果的一致性,当事务B执行update操作的时候,是可以更改事务A提交了的update,insert数据,执行过update操作之后再次select发现数据前后查询不一致!(幻读)
-- READ COMMITED read committed 提交的可读;(oracle默认)
-- READ UNCOMMITED read uncommitted 未提交的可读;(mysql 默认)别的事务可以查看的到使用 当前事务还没提交的 数据;会 脏读,幻读,不可重复读。
-- 幻读:一个事务的查询中查询两次数据,数据不一致!同时开启事务A,事务B。事务A查询一张表中的数据后,事务B修改update了事务A查询的表并做了提交,事务A再次查询这张表,发现数据的不一致!
首先说明:mysql的innodb存储引擎默认的隔离级别就是 repeatable read 可重复读
1.首先开启两个mysql连接,分别开启两个事务A,事务B;两个事务分别查询 software 表的数据,此时数据显示一致的。
1)事务A
2)事务B
3)事务A此时修改了sid = 4 的version ,select 可以查看当前修改的结果,但是还没有提交commit!
4)事务B select * from software;查看software是否有修改,发现没有被修改!
5)事务A,做commit提交;并查看select * from software;
6)事务B,在 5)中事务A做了提交之后,事务B此时是查看不到 事务A对 sid = 4 的version做出的修改的!
7)事务B,执行update software set version = version + 1; 并执行select * from software; 查看,发现出现了幻读。
sid = 4 的 version 是在事务A提交后的结果 version = 44 上进行了 + 1 的操作!
总结:幻读的实现场景:事务B先后查询software表出现的结果,与预想的update 后 version+1 的结果出现了不一致。
另外:事务A,事务B同时对software表的同一条记录做修改,后执行的事务可能会执行失败,此时可能会发生行锁的lock情况,执行不成功。后执行的事务必须等待先执行的事务先commit或者rollback,才能对这同一条要修改的记录作出修改;
如:事务A与事务B同时开启,事务A先对sid = 4 的version做修改update。事务B再修改sid的version
1>事务A,此时事务A还没有作出提交commit。
2>事务B 报错ERROR 1205 (HY000): Lock wait timeout exceeded; try restarting transaction
发生了行锁,sid= 4 的记录被事务A锁住了,等待事务A作出提交commit或rollback超时。
3>当事务A作出了commit之后,事务B在执行update如下,就可以成功update了
MySQL可重复读应用场景_mysql-repeatable read 可重复读隔离级别-幻读实例场景相关推荐
- 「Mysql 事务 隔离级别」 读提交和可重复读的区别
一.前提 首先我们应该先明确 Mysql的四种隔离级别和四种对应的现象 隔离级别: 读未提交.读已提交.可重复读.串行化 现象: 脏读.丢失修改.不可重复读.幻读 二.先说结论 读提交和可重复读都是一 ...
- 看完这篇文章,让你彻底理解事务隔离级别(读未提交、读已提交、可重复读、序列化)
对于不同的事务,采用不同的隔离级别分别有不同的现象.主要有下面3种: 1.脏读(dirty read):一个事务可以读取另一个尚未提交事务的修改数据. 2.不可重复读(nonrepeatable re ...
- 脏读、不可重复读 共享锁、悲观锁 和 事务五种隔离级别
http://www.cnblogs.com/adforce/archive/2011/04/20/2021929.html 一.脏读.不可重复读.幻读 1.脏读:脏读就是指当一个事务正在访问数据,并 ...
- MySQL 事务 :ACID、并发带来的问题、事务的隔离级别、事务的实现
文章目录 ACID 原子性 一致性 持久性 隔离性 并发带来的隔离问题 幻读(虚读) 不可重复读 脏读 丢失更新 隔离级别 Read Uncommitted (读未提交) Read Committed ...
- mysql事务的acid、三种并发问题与四种隔离级别
这里写目录标题 事物的ACID 事物并非下所引发的三种问题 以MYSQL数据库来分析四种隔离级别 mysql相关操作 Spring事物的传播行为 事物的ACID 事务是一个不可分割的数据库操作序列,是 ...
- mysql不可重复读是锁的表吗_Mysql事务,并发问题,锁机制-- 幻读、不可重复读(转)...
1.什么是事务 事务是一条或多条数据库操作语句的组合,具备ACID,4个特点. 原子性:要不全部成功,要不全部撤销 隔离性:事务之间相互独立,互不干扰 一致性:数据库正确地改变状态后,数据库的一致性约 ...
- mysql特性举例_MySQL事务的四大特性和隔离级别
1.事务的四大特性(ACID) #### 1.1.原子性(Atomicity) 原子性是指事务包含的一系列操作要么全部成功,要么全部回滚,不存在部分成功或者部分回滚,是一个不可分割的操作整体. 1.2 ...
- Mysql存储级别_mysql 存储引擎分类和事务隔离级别
mysql 存储引擎分类 myisam和innodb的区别 1. InnoDB支持事务,MyISAM不支持,对于InnoDB每一条SQL语言都默认封装成事务,自动提交,这样会影响速度,所以最好把多条S ...
- mysql mvcc 读写阻塞_mysql面试题MVCC原理事务隔离级别_aiailingfei的博客-CSDN博客
原文作者:小小一只鸟 原文标题:mysql面试题MVCC原理事务隔离级别 发布时间:2021-01-19 19:43:38 mysql事务隔离级别可重复读面试题 熊大 话说今天漂亮的妹子给我发过一张图 ...
最新文章
- MarkDown入门及技巧
- Postgresql在CentOS上的安装(脚本在线安装)
- sql创建计算机用户,2015年计算机四级数据库复习要点:SQL Server 登录账户
- python 控制qq_最必要的最小建议集:写给刚入门编程(python)的同学
- 使用ArchUnit验证代码和体系结构约束
- Linux(11)--(历史命令)Ctrl+r, history,!
- hdu - 3415 Max Sum of Max-K-sub-sequence
- linux内核长期支持版本,Linux Kernel 3.12长期支持分支迎来第63个维护版本
- BootStrap Table和Mybatis Plus实现服务端分页
- Windows下调试hadoop
- Spring事务原理分析(二)--@Transactional事务属性的解析
- 2022首届(江西)功能性农业农业大健康大会暨中国农民丰收节交易会
- Spring源码全解
- java 多音词语转拼音_py4j汉语转拼音多音字处理
- ubuntu20下使用微信开发者工具
- 越来越卷,教你使用Python实现卷积神经网络(CNN)
- 仰天大笑出门去,我辈岂是蓬蒿人。
- Android电视清理系统应用,【教程】无需root!卸载小米电视/盒子内置应用竟如此简单...
- ARANGODB INSTALL
- IconMaker:一款好用的图标制作工具