HOME 首页
SERVICE 服务产品
XINMEITI 新媒体代运营
CASE 服务案例
NEWS 热点资讯
ABOUT 关于我们
CONTACT 联系我们
创意岭
让品牌有温度、有情感
专注品牌策划15年

    虚读就是不可重复读吗(虚读就是不可重复读吗)

    发布时间:2023-04-13 12:49:12     稿源: 创意岭    阅读: 93        

    大家好!今天让创意岭的小编来大家介绍下关于虚读就是不可重复读吗的问题,以下是小编对此问题的归纳整理,让我们一起来看看吧。

    开始之前先推荐一个非常厉害的Ai人工智能工具,一键生成原创文章、方案、文案、工作计划、工作报告、论文、代码、作文、做题和对话答疑等等

    只需要输入关键词,就能返回你想要的内容,越精准,写出的就越详细,有微信小程序端、在线网页版、PC客户端

    官网:https://ai.de1919.com

    创意岭作为行业内优秀的企业,服务客户遍布全球各地,如需了解SEO相关业务请拨打电话175-8598-2043,或添加微信:1454722008

    本文目录:

    虚读就是不可重复读吗(虚读就是不可重复读吗)

    一、事务隔离级别有哪些?

    事务的隔离级别有4种,由低到高分别为Read uncommitted 、Read committed 、Repeatable read 、Serializable 。事物的并发操作中可能休闲脏读,不可重复读,幻读。

    1、第一种隔离级别:Read uncommitted(读未提交)

    如果一个事务已经开始写数据,则另外一个事务不允许同时进行写操作,但允许其他事务读此行数据,该隔离级别可以通过“排他写锁”,但是不排斥读线程实现。这样就避免了更新丢失,却可能出现脏读,也就是说事务B读取到了事务A未提交的数据。

    解决了更新丢失,但还是可能会出现脏读。

    2、第二种隔离级别:Read committed(读提交)

    如果是一个读事务(线程),则允许其他事务读写,如果是写事务将会禁止其他事务访问该行数据,该隔离级别避免了脏读,但是可能出现不可重复读。事务A事先读取了数据,事务B紧接着更新了数据,并提交了事务,而事务A再次读取该数据时,数据已经发生了改变。

    解决了更新丢失和脏读问题。

    3、第三种隔离级别:Repeatable read(可重复读取)

    可重复读取是指在一个事务内,多次读同一个数据,在这个事务还没结束时,其他事务不能访问该数据,这样就可以在同一个事务内两次读到的数据是一样的,因此称为是可重复读隔离级别,读取数据的事务将会禁止写事务,写事务则禁止任何其他事务,这样避免了不可重复读和脏读,但是有时可能会出现幻读。

    读取数据的事务可以通过“共享读镜”和“排他写锁”实现。

    解决了更新丢失、脏读、不可重复读、但是还会出现幻读。

    4、第四种隔离级别:Serializable(可序化)

    提供严格的事务隔离,它要求事务序列化执行,事务只能一个接着一个地执行,但不能并发执行,如果仅仅通过“行级锁”是无法实现序列化的,必须通过其他机制保证新插入的数据不会被执行查询操作的事务访问到。

    序列化是最高的事务隔离级别,同时代价也是最高的,性能很低,一般很少使用,在该级别下,事务顺序执行,不仅可以避免脏读、不可重复读,还避免了幻读。

    虚读就是不可重复读吗(虚读就是不可重复读吗)

    事务的基本要素(ACID)

    1、原子性(Atomicity):事务开始后所有操作,要么全部做完,要么全部不做,不可能停滞在中间环节。事务执行过程中出错,会回滚到事务开始前的状态,所有的操作就像没有发生一样。也就是说事务是一个不可分割的整体,就像化学中学过的原子,是物质构成的基本单位。

    2、一致性(Consistency):事务开始前和结束后,数据库的完整性约束没有被破坏 。比如A向B转账,不可能A扣了钱,B却没收到。

    3、隔离性(Isolation):同一时间,只允许一个事务请求同一数据,不同的事务之间彼此没有任何干扰。比如A正在从一张银行卡中取钱,在A取钱的过程结束前,B不能向这张卡转账。

    4、持久性(Durability):事务完成后,事务对数据库的所有更新将被保存到数据库,不能回滚。

    以上内容参考:事务隔离级别 - 百度百科

    二、普通话考试是不是不能重复读呢

    普通话考试可以重复读,第一、二项可以重复一次,第三项、第四项也不能重复,如果重复说明表达不流畅,也会扣不流畅的分值。

    普通话水平等级分为三级六等,即一、二、三级,每个级别再分出甲乙两个等次;一级甲等为最高,三级乙等为最低。普通话水平测试不是口才的评定,而是对应试人掌握和运用普通话所达到的规范程度的测查和评定,是应试人的汉语标准语测试。

    应试人在运用普通话口语进行表达过程中所表现的语音、词汇、语法规范程度,是评定其所达到的水平等级的重要依据。

    虚读就是不可重复读吗(虚读就是不可重复读吗)

    扩展资料:

    普通话考试的等级标准:

    一级 (标准的普通话)

    1、一级甲等(测试得分:97分-100分之间) 朗读和自由交谈时,语音标准,词语、语法正确无误,语调自然,表达流畅。

    2、一级乙等(测试得分:92分-96.99分之间) 朗读和自由交谈时,语音标准,词语、语法正确无误,语调自然,表达流畅。偶然有字音、字调失误。

    二级 (比较标准的普通话)

    1、二级甲等(测试得分:87分-91.99分之间) 朗读和自由交谈时,声韵调发音基本标准,语调自然,表达流畅。少数难点音有时出现失误。词语、语法极少有误。

    2、二级乙等(测试得分:80分-86.99分之间) 朗读和自由交谈时,个别调值不准,声韵母发音有不到位现象。难点音失误较多。方言语调明显。有使用方言词、方言语法的情况。

    三级(一般水平的普通话)

    1、三级甲等(测试得分:70分-79.99分之间) 朗读和自由交谈时,声韵母发音失误较多,难点音超出常见范围,声调调值多不准。方言语调较明显。词语、语法有失误。

    2、三级乙等(测试得分:60分-69.99分之间) 朗读和自由交谈时,声韵调发音失误多,方音特征突出。方言语调明显。词语、语法失误较多。外地人听其谈话有听不懂的情况。

    参考资料来源:百度百科—普通话水平测试

    三、关于spring事务配置的代码

    spring配置事务的代码:

    <bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">

    <property name="sessionFactory">

    <ref bean="sessionFactory"/>

    </property>

    </bean>

    <!-- 配置事务的传播特性 -->

    <tx:advice id="txAdvice" transaction-manager="transactionManager">

    <tx:attributes>

    <tx:method name="add*" propagation="REQUIRED"/>

    <tx:method name="del*" propagation="REQUIRED"/>

    <tx:method name="modify*" propagation="REQUIRED"/>

    <tx:method name="*" propagation="REQUIRED"/>

    </tx:attributes>

    </tx:advice>

    <!-- 那些类的哪些方法参与事务 -->

    <aop:config>

    <aop:pointcut id="allManagerMethod" expression="execution(* com.esoft.sale.manager.*.*(..))"/>

    <aop:advisor pointcut-ref="allManagerMethod" advice-ref="txAdvice"/>

    </aop:config>

    事务处理可以确保除非事务性单元内的所有操作都成功完成,否则不会永久更新面向数据的资源。通过将一组相关操作组合为一个要么全部成功要么全部失败的单元,可以简化错误恢复并使应用程序更加可靠。一个逻辑工作单元要成为事务,必须满足所谓的ACID(原子性、一致性、隔离性和持久性)属性:

    · 原子性 (atomic)

    事务必须是原子工作单元;对于其数据修改,要么全都执行,要么全都不执行。通常,与某个事务关联的操作具有共同的目标,并且是相互依赖的。如果系统只执行这些操作的一个子集,则可能会破坏事务的总体目标。原子性消除了系统处理操作子集的可能性。

    · 一致性 (consistent)

    事务在完成时,必须使所有的数据都保持一致状态。在相关数据库中,所有规则都必须应用于事务的修改,以保持所有数据的完整性。事务结束时,所有的内部数据结构(如 B 树索引或双向链表)都必须是正确的。某些维护一致性的责任由应用程序开发人员承担,他们必须确保应用程序已强制所有已知的完整性约束。例如,当开发用于转帐的应用程序时,应避免在转帐过程中任意移动小数点。

    · 隔离性 (insulation)

    由并发事务所作的修改必须与任何其它并发事务所作的修改隔离。事务查看数据时数据所处的状态,要么是另一并发事务修改它之前的状态,要么是另一事务修改它之后的状态,事务不会查看中间状态的数据。这称为可串行性,因为它能够重新装载起始数据,并且重播一系列事务,以使数据结束时的状态与原始事务执行的状态相同。当事务可序列化时将获得最高的隔离级别。在此级别上,从一组可并行执行的事务获得的结果与通过连续运行每个事务所获得的结果相同。由于高度隔离会限制可并行执行的事务数,所以一些应用程序降低隔离级别以换取更大的吞吐量。

    · 持久性 (Duration)

    事务完成之后,它对于系统的影响是永久性的。该修改即使出现致命的系统故障也将一直保持。

    事务准备接受不一致数据的级别称为隔离级别。隔离级别是一个事务必须与其它事务进行隔离的程度。较低的隔离级别可以增加并发,但代价是降低数据的正确性。相反,较高的隔离级别可以确保数据的正确性,但可能对并发产生负面影响。应用程序要求的隔离级别确定了所使用的锁定行为:

    数据库在被广大客户所共享访问的操作过程中很可能出现以下几种不确定情况 :

    1. 更新丢失(Lost update):两个事务都同时更新一行数据但是第二个事务却中途失败退出导致对数据两个修改都失效了这是系统没有执行任何锁操作因此并发事务并没有被隔离开来

    2. 脏读取(Dirty Reads):一个事务开始读取了某行数据但是另外一个事务已经更新了此数据但没有能够及时提交。这是相当危险很可能所有操作都被回滚

    3. 不可重复读取(Non-repeatable Reads):一个事务对同一行数据重复读取两次但是却得到了不同结果。例如在两次读取中途有另外一个事务对该行数据进行了修改并提交

    4. 两次更新问题(Second lost updates problem):无法重复读取特例,有两个并发事务同时读取同一行数据然后其中一个对它进行修改提交而另一个也进行了修改提交这就会造成第一次写操作失效

    5. 虚读(Phantom Reads):也称为幻像(幻影)。事务在操作过程中进行两次查询,第二次查询结果包含了第一次查询中未出现的数据(这里并不要求两次查询SQL语句相同)这是因为在两次查询过程中有另外一个事务插入数据造成的

    为了避免上面出现几种情况在标准SQL规范中定义了4个事务隔离级别,不同隔离级别对事务处理不同 。

    1.未授权读取(Read Uncommitted):也称未提交读。允许脏读取但不允许更新丢失,如果一个事务已经开始写数据则另外一个数据则不允许同时进行写操作但允许其他事务读此行数据。该隔离级别可以通过“排他写锁”实现 。事务隔离的最低级别,仅可保证不读取物理损坏的数据。与READ COMMITTED 隔离级相反,它允许读取已经被其它用户修改但尚未提交确定的数据。

    2. 授权读取(Read Committed):也称提交读。允许不可重复读取但不允许脏读取。这可以通过“瞬间共享读锁”和“排他写锁”实现,读取数据的事务允许其他事务继续访问该行数据,但是未提交写事务将会禁止其他事务访问该行 。SQL Server 默认的级别。在此隔离级下,SELECT 命令不会返回尚未提交(Committed) 的数据,也不能返回脏数据。

    3. 可重复读取(Repeatable Read):禁止不可重复读取和脏读取。但是有时可能出现幻影数据,这可以通过“共享读锁”和“排他写锁”实现,读取数据事务将会禁止写事务(但允许读事务),写事务则禁止任何其他事务 。在此隔离级下,用SELECT 命令读取的数据在整个命令执行过程中不会被更改。此选项会影响系统的效能,非必要情况最好不用此隔离级。

    4. 序列化(Serializable):也称可串行读。提供严格的事务隔离,它要求事务序列化执行,事务只能一个接着一个地执行,但不能并发执行。如果仅仅通过“行级锁”是无法实现事务序列化的,必须通过其他机制保证新插入的数据不会被刚执行查询操作事务访问到 。事务隔离的最高级别,事务之间完全隔离。如果事务在可串行读隔离级别上运行,则可以保证任何并发重叠事务均是串行的。

    下面是四种隔离级别允许不同类型的行为。

    隔离级别 脏读 不可重复读取 幻像(幻影)

    未提交读 是 是 是

    提交读 否 是 是

    可重复读 否 否 是

    可串行读 否 否 否

    隔离级别越高越能保证数据完整性和一致性,但是对并发性能影响也越大。对于多数应用程序,可以优先考虑把数据库系统隔离级别设为Read Committed ,它能够避免脏读取而且具有较好并发性能。尽管它会导致不可重复读、虚读和第二类丢失更新这些并发问题,在可能出现这类问题的个别场合,可以由应用程序采用悲观锁或乐观锁来控制 。

    锁(Lock) 是在多用户环境下对资源访问的一种限制。机制当对一个数据源加锁后,此数据源就有了一定的访问限制。我们就称对此数据源进行了“锁定”。在SQL Server中,可以对以下的对象进行锁定:

    数据行(Row):数据页中的单行数据;

    索引行(Key):索引页中的单行数据,即索引的键值;

    页(Page):页是SQL Server 存取数据的基本单位,其大小为8KB;

    盘区(Extent):一个盘区由8 个连续的页组成;

    表(Table);

    数据库(Database)。

    四、hibernate事物管理是干嘛用的。谁能给具体解释一下

    hibernate中的事务管理.

    事务:一个操作由多个单元组成这些单元要不全都成功,要不全都不成功。

    事务特性:ACID

    设置hibernate的事务隔离级别

    hibernate.connection.isolation = 4

    1—Read uncommitted isolation

    2—Read committed isolation ----oracle默认

    4—Repeatable read isolation---mysql默认

    8—Serializable isolation

    说白了,hibernate事务管理就是为了防止产生脏读,不可重复读,虚读,幻读的情况。

    有了spring的话,一般会把事务交给spring来管理,spring有专门的事务管理器的。

    以上就是关于虚读就是不可重复读吗相关问题的回答。希望能帮到你,如有更多相关问题,您也可以联系我们的客服进行咨询,客服也会为您讲解更多精彩的知识和内容。


    推荐阅读:

    虚读就是不可重复读吗(虚读就是不可重复读吗)

    怎么在抖音视频上加文字(抖音一边说话一边出字幕)

    杭州十大金牌婚礼司仪(杭州十大金牌婚礼司仪排名)