mysql 事务隔离级别

浩客9个月前技术文章193

一、事务隔离级别介绍

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

  • 事务隔离级别

     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会一直等待。


相关文章

image.png

KVM网络配置

一、创建桥接网络1、创建桥接网卡br0(相当于vmnet1桥接器)cd /etc/sysconfig/network-scripts/cp ifcfg-ens33 ifcfg-br02、修改br0参数...

ACOS无数据告警实践

ACOS无数据告警实践

1.说明在实现数据监控的过程中告警能力无疑是重中之重,无数据告警亦是告警能力中重要的场景,这里我们聊聊关于无数据一些场景和实践方法。2.无数据可能场景对于运维监控平台来说无数据是一个比较复杂的情况,从...

K8s Pod无法访问SLB地址

K8s Pod无法访问SLB地址

一、问题现象客户反馈172.16.11.220 telnet 47.99.87.129 80 不通,另一台172.16.11.219可以通。二、排查思路172.16.11.220,172.16.11....

oracle安装实例的响应文件模板解析

位置在:db解压目录下database/response/dbca.rsp###############################################################...

CDH-Impala集成ldap认证

CDH-Impala集成ldap认证

1、背景集群版本:cdh6.2.0impala版本:3.2.0+cdh6.2.0用户认证:AD由于用户需要使用数据库工具连接impala,但是集群开启了kerberos,如果使用数据库连接工具连接im...

PostgreSQL 锁等待排查

PostgreSQL 锁等待排查

说明在数据库中,常用 锁 和 MVCC 来保障事务的一致性及提高并发性。锁问题的定位和排查也是数据库运维人员必会的技能,本篇文章介绍 PostgreSQL 如何排查定位锁堵塞问题。1. Postgre...

发表评论    

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