12【事务的隔离级别】_在同一事务中多次查询

还有兄弟不知道网络安全面试可以提前刷题吗?费时一周整理的160+网络安全面试题,金九银十,做网络安全面试里的显眼包!

王岚嵚工程师面试题(附答案),只能帮兄弟们到这儿了!如果你能答对70%,找一个安全工作,问题不大。

对于有1-3年工作经验,想要跳槽的朋友来说,也是很好的温习资料!

【完整版领取方式在文末!!】

93道网络安全面试题

需要体系化学习资料的朋友,可以加我V获取:vip204888 (备注网络安全)

内容实在太多,不一一截图了

黑客学习资源推荐

最后给大家分享一份全套的网络安全学习资料,给那些想学习 网络安全的小伙伴们一点帮助!

对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。

1️⃣零基础入门
① 学习路线

对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。

image

② 路线对应学习视频

同时每个成长路线对应的板块都有配套的视频提供:

image-20231025112050764

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化资料的朋友,可以点击这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

mysql>


**设置全局事务隔离级别**



set global transaction isolation level 四种隔离; – 服务器只要不关闭一直有效



> 
> **修改隔离级别后需要重启会话**
> 
> 
> 


### 12.5 脏读


在并发情况下,一个事务读取到另一个事务没有提交的数据,**这个数据称之为脏数据,此次读取也称为脏读。**


只有`read uncommitted`(读未提交)的隔离级别才会引发脏读。


* 将MySQL的事务隔离级别设置为`read committed`(读已提交):



mysql> set global transaction isolation level read uncommitted;
Query OK, 0 rows affected (0.00 sec)


将数据还原:


![在这里插入图片描述](https://img-blog.csdnimg.cn/4afe46c06030420995a6b02aa7b44abf.png#pic_center)


#### 12.5.1 脏读演示




| session-01 | session-02 |
| --- | --- |
| begin; |  |
|  | begin; |
| select \* from account where name=‘a’; |  |
|  | update account set money=money-200 where name=‘a’; |
| select \* from account where name=‘a’; |  |
|  | rollback; |


观察变化:


![在这里插入图片描述](https://img-blog.csdnimg.cn/a83fac71eebe472d9ee543b05d43f1c4.png#pic_center)


#### 12.5.2 解决脏读


将全局的隔离级别进行提升


1. 打开命令行a,设置全局的隔离级别为read committed:



set global transaction isolation level read committed;


再次执行:




| session-01 | session-02 |
| --- | --- |
| begin; |  |
|  | begin; |
| select \* from account where name=‘a’; |  |
|  | update account set money=money-200 where name=‘a’; |
| select \* from account where name=‘a’; |  |
|  | rollback; |


观察变化:


![在这里插入图片描述](https://img-blog.csdnimg.cn/e07cddbd3bff474d922274511f673317.png#pic_center)


### 12.6 不可重复读


概念: 在同一个事务中的多次查询应该出现相同的结果,两次读取不能出现不同的结果。


#### 12.6.1 和脏读的区别:


**脏读是读取前一事务未提交的脏数据,不可重复读是重复读取了前一事务已提交的数据,但2次读取的结果不同。**


应用场景:比如银行程序需要将查询结果分别输出到电脑屏幕和写到文件中,结果在一个事务中针对输出的目的地,两次输出结果却不一致,导致文件和屏幕中的结果不同,银行工作人员就不知道以哪个为准了。


#### 12.6.2 不可重复读演示


1). 将数据进行恢复,并关闭窗口重新登录。



update account set money=1000;




| session-01 | session-02 |
| --- | --- |
| begin; |  |
|  | begin; |
| select \* from account where name=‘a’; |  |
|  | update account set money=money-200 where name=‘a’; |
|  | commit; |
| select \* from account where name=‘a’; |  |


观察变化:


![在这里插入图片描述](https://img-blog.csdnimg.cn/c8427d1b563e462fa9615c3ea350d0ad.png#pic_center)



> 
> 两次查询输出的结果不同,到底哪次是对的?
> 
> 
> 


#### 12.6.3 解决不可重复读


1)将数据进行恢复



update account set money=1000;

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


**记得要重启窗口**




| session-01 | session-02 |
| --- | --- |
| begin; |  |
|  | begin; |
| select \* from account where name=‘a’; |  |
|  | update account set money=money-200 where name=‘a’; |
|  | commit; |
| select \* from account where name=‘a’; |  |


观察变化:


![在这里插入图片描述](https://img-blog.csdnimg.cn/e6846618599a4ef395f204f0c4212949.png#pic_center)


结论:为了保存多次查询数据一致,必须使用`repeatable read`隔离级别


### 12.7 幻读


概念:一次事务多次读取到的条数不一致而引发的问题;


**在InnoDB(暂时理解是MySQL)中幻读在很多地方都得到了解决,但在一些特殊的情况下,还是会引发幻读问题;**


**为什么有的情况下能解决,有的情况下解决不了?因为一次事务多次读取到的条数不一致会导致有很多情况发生!**


#### 12.7.1 幻读解决情况1):


还原数据:



update account set money=1000;

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



> 
> 记得重启客户端
> 
> 
> 




| session-01 | session-02 |
| --- | --- |
| begin; |  |
|  | begin; |
| select \* from account; |  |
|  | insert into account values(3,‘c’,1000); |
|  | commit; |
| select \* from account; |  |


观察变化:


![在这里插入图片描述](https://img-blog.csdnimg.cn/b78cb50f19484a958545768229606eec.png#pic_center)


幻读问题得到解决


#### 12.7.2 幻读解决情况2):


还原数据


案例:




| session-01 | session-02 |
| --- | --- |
| begin; |  |
|  | begin; |
| select sum(money) from account; |  |
|  | insert into account values(3,‘c’,1000); |
|  | commit; |
| select sum(money) from account; |  |


观察变化:


![在这里插入图片描述](https://img-blog.csdnimg.cn/d831739768284e6396711fbc8feb479d.png#pic_center)


#### 12.7.3 幻读问题出现情况1):


还原数据


* 案例:




| session-01 | session-02 |
| --- | --- |
| begin; |  |
|  | begin; |
| select count(id) from account; |  |
|  | insert into account values(3,‘c’,1000); |
|  | commit; |
| select count(id) from account; |  |
| update account set money=0; |  |
| select count(id) from account; |  |


观察变化:


![在这里插入图片描述](https://img-blog.csdnimg.cn/ae8d99a21b5d4dddb9e2d0297a88d130.png#pic_center)


#### 12.7.3 特殊情况:


还原数据


* 案例:




| session-01 | session-02 |
| --- | --- |
|  | begin; |
| begin; |  |
| select \* from account; |  |
|  | select \* from account; |
|  | insert into account values(3,“c”,1000); |
|  | commit; |
| select \* from account; |  |
| insert into account values(3,“c”,1000); |  |


观察变化:


![在这里插入图片描述](https://img-blog.csdnimg.cn/59c1a709a6b144ada75f6c8fc8afd66e.png#pic_center)



> 
> Tips:严格意义来说,上述案例是MySQL的**快照机制导致**的,不能算幻读;关于幻读我们理解概念就行,即:两次读取到的条数不一致!这就是幻读
> 
> 
> 


### 12.9 串行化


#### 12.9.1 概念


想要彻底的解决幻读,那么我们必须再把隔离级别调高,数据库的最高隔离级别为串行化(serializable)


**串行化相当于锁表操作**,即一个事务如果操作了某张表(增加、删除、修改),那么就不允许其他任何事务操作此表,也不允许查询,等第一个事务提交或者回滚之后才可以操作,这样做效率及其低下,因此一般不会采用`serializable`隔离级别


* 示例图:  
 ![在这里插入图片描述](https://img-blog.csdnimg.cn/20200608094639284.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0JiMTUwNzAwNDc3NDg=,size_16,color_FFFFFF,t_70)


#### 12.9.2 串行化演示


1)开启一个银行窗口



– 还原数据
truncate account;

INSERT INTO account (name, money) VALUES (‘a’, 1000), (‘b’, 1000);

一、网安学习成长路线图

网安所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。
在这里插入图片描述

二、网安视频合集

观看零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。
在这里插入图片描述

三、精品网安学习书籍

当我学到一定基础,有自己的理解能力的时候,会去阅读一些前辈整理的书籍或者手写的笔记资料,这些笔记详细记载了他们对一些技术点的理解,这些理解是比较独到,可以学到不一样的思路。
在这里插入图片描述

四、网络安全源码合集+工具包

光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。
需要体系化学习资料的朋友,可以加我V获取:vip204888 (备注网络安全)

在这里插入图片描述

五、网络安全面试题

最后就是大家最关心的网络安全面试题板块
在这里插入图片描述在这里插入图片描述

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化资料的朋友,可以点击这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 28
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值