zoukankan      html  css  js  c++  java
  • 事务隔离级别

    1.1 未提交读

    未提交读(READ_UNCOMMITTED)是最低的隔离级别,其含义是允许一个事物读取另一个事物没提交的数据。优点在于并发能力高,适合那些对数据一致性没有要求而追求高并发的场景,最大缺点是出现脏读。

    @Transactional(isolation = Isolation.READ_UNCOMMITTED)

    例子讲解:

    T3时刻,因为采用未提交读,所以事务2可以读取事务1未提交的库存数据为1,这里当它扣减库存后则数据为0,然后它提交了事务,库存就变为了0 。,而事务1在T5时刻回滚事务,因为第一类丢失更新已经被克服,所以它不会将库存回滚到2,那么最后的结果就变为了0,这样就出现了错误。

    1.2 读写提交

    读写提交(READ_COMMITTED),一个事务只能读取另外一个事务已提交的数据,不能读取未提交的数据。该级别克服了脏读,但不可重复读。

    @Transactional(isolation = Isolation.READ_COMMITTED)


    案例讲解:

     

    1.3 可重复读

    可重复读(REPEATABLE_READ),目标是克服读写提交中出现的不可重复读的现象,但会出现幻读。

    1 @Transactional(isolation = Isolation.REPEATABLE_READ)

    案例讲解:

     

    1.4 串行化

    串行化(SERIALIZABLE),是数据库最高的隔离级别,它能够完全保证数据的一致性,但性能降低了。

    1.5 使用合理的隔离级别

    隔离级别和可能发生的现象如下:

    对于不同的数据库,支持的隔离级别也不一样:Oracle只能支持读写提交和串行化,而MySQL能够支持4种,对于Oracle默认的隔离级别为读写提交,MySQL则是可重复读。

  • 相关阅读:
    Dicom文件转mhd,raw文件格式
    李宏毅机器学习笔记6:Why deep、Semi-supervised
    李宏毅机器学习笔记5:CNN卷积神经网络
    Oracle数据库类型总结
    Oracle数据库连接生成DataX的job-Json
    [JavaWeb基础] 030.dom4j读取xml的4种方法
    [JavaWeb基础] 029.OGNL表达式介绍
    eatwhatApp开发实战(五)
    [Axure教程]0005.系统函数与变量介绍
    eatwhatApp开发实战(四)
  • 原文地址:https://www.cnblogs.com/bulrush/p/12166905.html
Copyright © 2011-2022 走看看