IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> mysql事务隔离级别及读问题的介绍 -> 正文阅读

[大数据]mysql事务隔离级别及读问题的介绍

事务的四大隔离级别

序列化(SERIALIZABLE):如果隔离级别为序列化,则用户之间通过一个接一个顺序地执行当前的事务,这种隔离级别提供了事务之间最大限度的隔离

可重复读(REPEATABLE READ):在可重复读在这一隔离级别上,事务不会被看成是一个序列。不过,当前正在执行事务的变化仍然不能被外部看到,也就是说,如果用户在另外一个事务中执行同条 SELECT 语句数次,结果总是相同的。(因为正在执行的事务所产生的数据变化不能被外部看到)。mysql默认事务隔离级别

提交读(READ COMMITTED):READ COMMITTED 隔离级别的安全性比 REPEATABLE READ 隔离级别的安全性要差。处于 READ COMMITTED 级别的事务可以看到其他事务对数据的修改。也就是说,在事务处理期间,如果其他事务修改了相应的表,那么同一个事务的多个 SELECT 语句可能返回不同的结果

未提交读(READ UNCOMMITTED):READ UNCOMMITTED 提供了事务之间最小限度的隔离。除了容易产生虚幻的读操作和不能重复的读操作外,处于这个隔离级的事务可以读到其他事务还没有提交的数据,如果这个事务使用其他事务不提交的变化作为计算的基础,然后那些未提交的变化被它们的父事务撤销,这就导致了大量的数据变化

###三大读问题

脏读(存在于READ UNCOMMITTED):一个事务读到另外一个事务还没有提交的数据,称之为脏读。

#修改 当前会话隔离级别  未提交读READ UNCOMMITTED 只需要修改会话一的事务隔离级别
SET SESSION TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
# 会话一
START TRANSACTION;
UPDATE tb1 SET `name` = 'zhoumu' WHERE `name`='www' and id = 1;

# 会话二
SELECT * FROM tb1 WHERE id=1;
#结果 会话二而查询到会话一 未提交 的数据,查询到的名字为zhoumu

不可重复读(存在于READ COMMITTED,READ UNCOMMITTED):一个事务先后读取同一条记录,但两次读取的数据不同,称之为不可重复读。其中的后是事务已提交后。

#修改当前会话隔离级别  修改全局READ COMMITTED
SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED;

#会话一
START TRANSACTION;
UPDATE tb1 SET `name` = 'zhoumu' WHERE `name`='www' and id=1;

commit;

#会话二
SELECT * FROM tb1 WHERE id=1;

#结果 会话二在会话一为提交前查询到的名字为www,会话一事物提交后,查询到的名字为zhoumu

幻读(存在于REPEATABLE READ,READ COMMITTED,READ UNCOMMITTED):会话中查询不到某条数据,但是对该数据插入或修改是却又是存在的,也就是说查询到的值并非真实值

#修改当前会话隔离级别  修改全局READ COMMITTED
SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED;
#会话一
START TRANSACTION;
INSERT tb1 VALUES(2,'test');

commit;

#会话二
SELECT * FROM tb1 WHERE id=1;
INSERT tb1 VALUES(2,'test');

#结果:在会话一未提交前执行会话二的插入,会话二将持续等待,而会话二查询时却查询不到数据已经插入的值,当会话一事务提交后,会话二才停止等待

参考视频:https://www.bilibili.com/video/BV14L4y1B7mB

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2022-03-21 20:57:41  更:2022-03-21 20:58:22 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 6:49:14-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码