您当前的位置:网站首页>常见问题>虚读就是不可重复读吗 找常见问题就上ki4.cc (>^ω^<),虚读,不可重复读

虚读就是不可重复读吗 找常见问题就上ki4.cc (>^ω^<),虚读,不可重复读

2020年05月22日 投稿作者: 围观人数:29

现在学什么好找工作 找常见问题就上ki4.cc (>^ω^<)

想要学一个好找工作的专业,就要看它在社会上的需求大不大,在如今这个互联网发达的时代,想必大家都知道,著名的百度、阿里、腾讯、今日头条都出身计算机领域,也就是说如今的中国已经离不开互联网,无论在哪个地方,哪个企业都离不开计算机IT人才。

虚读就是不可重复读吗?

虚读和不可重复读是不一样的。

脏读 dirty reads:当事务读取还未被提交的数据时,就会发生这种事件。举例来说:Transaction 1 修改了一行数据,然后 Transaction 2 在 Transaction 1 还未提交修改操作之前读取了被修改的行。如果 Transaction 1 回滚了修改操作,那么 Transaction 2 读取的数据就可以看作是从未存在过的。

不可重复的读 non-repeatable reads:当事务两次读取同一行数据,但每次得到的数据都不一样时,就会发生这种事件。举例来说:Transaction 1 读取一行数据,然后 Transaction 2 修改或删除该行并提交修改操作。当 Transaction 1 试图重新读取该行时,它就会得到不同的数据值(如果该行被更新)或发现该行不再存在(如果该行被删除)。

虚读 phantom read:如果符合搜索条件的一行数据在后面的读取操作中出现,但该行数据却不属于最初的数据,就会发生这种事件。举例来说:Transaction 1 读取满足某种搜索条件的一些行,然后 Transaction 2 插入了符合 Transaction 1 的搜索条件的一个新行。如果 Transaction 1 重新执行产生原来那些行的查询,就会得到不同的行。

事务场景是这样的:

对于同一个银行帐户A内有200元,甲进行提款操作100元,乙进行转帐操作100元到B帐户。如果事务没有进行隔离可能会并发如下问题:

学Java要先学C语言吗 找常见问题就上ki4.cc (>^ω^<)

可以不要,Java是一门面向对象的语言,而C是一门面向过程的语言,有些人之所以选择先学C再学Java,其主要是因为Java和C有许多语法相似的地方,如果C语言入门,学java就会简单一点。

1、第一类丢失更新:首先甲提款时帐户内有200元,同时乙转帐也是200元,然后甲乙同时操作,甲操作成功取走100元,乙操作失败回滚,帐户内最终为200元,这样甲的操作被覆盖掉了,银行损失100元。

2、脏读:甲取款100元未提交,乙进行转帐查到帐户内剩有100元,这是甲放弃操作回滚,乙正常操作提交,帐户内最终为0元,乙读取了甲的脏数据,客户损失100元。

3、虚读:和脏读类似,是针对于插入操作过程中的读取问题,如丙存款100元未提交,这时银行做报表进行统计查询帐户为200元,然后丙提交了,这时银行再统计发现帐户为300元了,无法判断到底以哪个为准?

大家好像觉得统计这个东西肯定是时时更新的,这种情况很正常;但是如果统计是在一个事务中的时候就不正常了,比如我们的一个统计应用需要将统计结果分别输出到电脑屏幕和远程网络某台计算机的磁盘文件中,为了

提高性能和用户响应我们分成2个线程,这时先完成的和后完成的统计数据就可能不一致,我们就不知道以哪个为准了。

4、不可重复读:甲乙同时开始都查到帐户内为200元,甲先开始取款100元提交,这时乙在准备最后更新的时候又进行了一次查询,发现结果是100元,这时乙就会很困惑,不知道该将帐户改为100还是0。

和脏读的区别是,脏读是读取前一事务未提交的脏数据,不可重复读是重新读取了前一事务已提交的数据。

5、第二类丢失更新:是不可重复读的一种特例,如上,乙不做第二次查询而是直接操作完成,帐户内最终为100元,甲的操作被覆盖掉了,银行损失100元。感觉和第一类丢失更新类似。

以上就是虚读就是不可重复读吗的详细内容,更多请关注ki4导航其它相关文章!

PHP,C,Java 的区别 找常见问题就上ki4.cc (>^ω^<)

PHP语言是一种脚本语言,主要用来开发网站服务器端;C语言可以说是高级编程语言之父,是所有高级语言的来源,其主要用于编写桌面软件和底层的驱动;Java是解释执行的一种语言,需要在Java虚拟机上执行,一般用于编写网站的服务器端和安卓软件。

标签

版权说明
免责声明:本文文章内容由ki4导航网发布,但不代表本站的观点和立场,具体内容可自行甄别.