mysql 事务隔离级别

浩客2年前技术文章712

一、事务隔离级别介绍

  • 多个连接开启各自事务操作数据库中数据时,数据库系统要负责隔离操作,以保证各个连接在获取数据时的准确性。

  • 事务隔离级别

     MySQL隔离级别定义了事务与事务之间的隔离程度  

1.png

二、不考虑隔离性,可能会引发如下问题

  • 脏读( dirty read ):当一个事务读取另一个事务尚未提交的改变(update,insert,delete)时,产生脏读

  • 不可重复读( nonrepeatable read ):同一查询在同一事务中多次进行,由于其他提交事务所做的修改或删除,每次返回不同的结果集,此时发生不可重复读。

  • 幻读( phantom read ):同一查询在同一事务中多次进行,由于其他提交事务所做的插入操作,每次返回不同的结果集,此时发生幻读。

三、演示MySQL的事务隔离级别

1、读未提交(READ UNCOMMITTED)

(1)、脏读

-- 1. 开了两个 mysql 的控制台
-- 2. 查看当前 mysql 的隔离级别
SELECT @@tx_isolation;

-- 3.把其中一个控制台的隔离级别设置 Read uncommitted
SET SESSION TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;

2.png

--控制台1
--开启事务
start transaction;
use haoke;
CREATE TABLE `account`(
id INT, `name` VARCHAR(32), money INT);
insert into account value(100,'hawk',1000);

--控制台2
--开启事务
start transaction;
use haoke;
select * from account;

3.png

控制台1的事务还未提交,控制台2就查到数据,这就是脏读。

(2)、不可重复读、幻读(基于以上继续操作)

--控制台1
update account set money = 800 where id=100;
insert into account values(200,'jack',2000);
--提交事务
commit;

--控制台2
select * from account;

4.png

  • 控制台2的事务还未commit,由于控制台1的提交影响了控制台2对表数据的读取,就产生了不可重复读、幻读。

  • 通俗的说,就是当两个事务A、B连接到数据的同一表时,希望所能读取到的数据就是在事务连接到表(开启事务)这一时刻的数据

2、读已提交(READ COMMITTED)

--把其中一个控制台2的隔离级别设置 Read committed
SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED;

5.png

  • 读已提交不会产生脏读

6.png

  • 读已提交的隔离级别下产生不可重复读和幻读

3、可重复读(Repeatable read)

7.png

  • 可重复读不会产生脏读

8.png

  • 可重复读的隔离级别下不会产生不可重复读和幻读

4、可串行化(Serializable)

两个事务A、B,当事务A在操作表时且事务A未commit,此时,当事务B试图操作表时,会检查事务A是否commit,如果A未commit,事务B会一直等待。


相关文章

Hive优化之配置参数的优化(一)

Hive优化之配置参数的优化(一)

 Hive是大数据领域常用的组件之一,主要是大数据离线数仓的运算,关于Hive的性能调优在日常工作和面试中是经常涉及的一个点,因此掌握一些Hive调优是必不可少的一项技能。影响Hive效率的...

Shell中单引号和双引号区别

1)在/home/atguigu/bin创建一个test.sh文件[atguigu@hadoop102 bin]$ vim test.sh在文件中添加如下内容#!/bin/bashdo_date=$1...

阿里云上oracle 11g rac部署

1 环境规划1.1 物理环境规划ECS 类型服务器类型服务器配置操作系统版本Oracle 版本阿里云g7se8C 32GCentOS 7.911.2.0.4.01.2 磁盘规划DBNAMEHOSTNA...

HPA控制器

HPA控制器

HPA (动态扩缩容)kubectl 有一个 scale 命令 kubectl scale deployment/nginx --replicas=4 它可以帮助 Pod 进行扩缩容,这个过程完全手动...

内存--模拟内存打满

1 tmpfs介绍tmpfs是一种虚拟内存文件系统,正如这个定义它最大的特点就是它的存储空间在VM里面     VM是由linux内核里面的vm子系统管理的东...

HDP部署Tez UI

HDP部署Tez UI

首先部署tomcat在官网下载apache-tomcat-9.0.22.tar.gz[root@hdp02 opt]# wget https://archive.apache.org/dist/tom...

发表评论    

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。