全国旗舰校区

不同学习城市 同样授课品质

北京

深圳

上海

广州

郑州

大连

武汉

成都

西安

杭州

青岛

重庆

长沙

哈尔滨

南京

太原

沈阳

合肥

贵阳

济南

下一个校区
就在你家门口
+
当前位置:首页  >  技术干货

什么是事务隔离级别呢?

发布时间:2023-06-12 17:20:00
发布人:zyh

  全文大约【1505】字,不说废话,只讲可以让你学到技术、明白原理的纯干货!本文带有丰富案例及配图视频,让你更好的理解和运用文中的技术概念,并可以给你带来具有足够启迪的思考......

什么是事务隔离级别

  一. 事务隔离级别

  什么是事务隔离级别呢?对我们的日常操作结果又有什么影响呢?下面小编带各位小伙伴先来了解下事务隔离级别的概念。

  1.隔离级别的概念

  多个客户端操作时 ,各个客户端的事务之间应该是隔离的,相互独立的 , 不受影响的。

  如果多个事务操作同一批数据时,则需要设置不同的隔离级别 , 否则就会产生问题 。

  2.四种隔离级别

  我们先来了解一下四种隔离级别的名称 , 再来看看可能出现的问题。

1684148060557.image

  3.可能引发的问题

  下面小编总结了数据库中不同事务隔离级别可能引发的问题。各位小伙伴可以参照下。

1684148144702.image

  4.数据库隔离级别操作语法

  查询数据库隔离级别:

  语法:SELECT @@TX_ISOLATION;

  修改数据库隔离级别:

  语法:SET GLOBAL TRANSACTION ISOLATION LEVEL 级别字符串;

  5.事务隔离级别演示

  举个栗子:脏读的问题。  

-- 查询账户表
select * from account;

-- 设置隔离级别为read uncommitted
set global transaction isolation level read uncommitted;

-- 开启事务
start transaction;

-- 转账
update account set money = money - 500 where id = 1;
update account set money = money + 500 where id = 2;

-- 窗口2查询转账结果 ,出现脏读(查询到其他事务未提交的数据)

-- 窗口2查看转账结果后,执行回滚
rollback;

  举个栗子:解决脏读的问题和演示不可重复读的问题。 

-- 设置隔离级别为read committed
set global transaction isolation level read committed;

-- 开启事务
start transaction;

-- 转账
update account set money = money - 500 where id = 1;
update account set money = money + 500 where id = 2;

-- 窗口2查看转账结果,并没有发生变化(脏读问题被解决了)

-- 执行提交事务。
commit;

-- 窗口2查看转账结果,数据发生了变化(出现了不可重复读的问题,读取到其他事务已提交的数据)

  举个栗子:解决不可重复读的问题。  

-- 设置隔离级别为repeatable read
set global transaction isolation level repeatable read;

-- 开启事务
start transaction;

-- 转账
update account set money = money - 500 where id = 1;
update account set money = money + 500 where id = 2;

-- 窗口2查看转账结果,并没有发生变化

-- 执行提交事务
commit;

-- 这个时候窗口2只要还在上次事务中,看到的结果都是相同的。
-- 只有窗口2结束事务,才能看到变化(不可重复读的问题被解决)

  6.隔离级别总结

1684148228628.image

  注意:隔离级别从小到大安全性越来越高,但是效率越来越低 , 所以不建议使用READ UNCOMMITTED 和 SERIALIZABLE 隔离级别。

  二. 结语

  小编在这里对本文核心要点进行总结:

  1.理解脏读、幻读、不可重复读产生的原因和解决办法。

  2.各位小伙伴熟练记住不同隔离级别以及会导致的问题。

#事务隔离级别

相关文章

flutter为什么不使用kotlin作为开发语言?

flutter为什么不使用kotlin作为开发语言?

2023-10-15
opencv和yolo是什么样的关系?

opencv和yolo是什么样的关系?

2023-10-15
矩阵的2范数与向量的2范数有什么关系?

矩阵的2范数与向量的2范数有什么关系?

2023-10-15
什么是逆强化学习?

什么是逆强化学习?

2023-10-15

最新文章

常见网络安全面试题:Windows常用的命令有哪些?

常见网络安全面试题:Windows常用的命令有哪些?

2023-10-09
常见网络安全面试题:根据设备告警如何展开排查?

常见网络安全面试题:根据设备告警如何展开排查?

2023-10-09
常见网络安全面试题:mysql加固呢?(数据库加固)

常见网络安全面试题:mysql加固呢?(数据库加固)

2023-10-09
常见网络安全面试题:windows和linux加固?(操作系统加固)

常见网络安全面试题:windows和linux加固?(操作系统加固)

2023-10-09
在线咨询 免费试学 教程领取