当前位置:  开发笔记 > 后端 > 正文

Oracle DB的隔离级别和JDBC的TRANSACTION_NONE属性

如何解决《OracleDB的隔离级别和JDBC的TRANSACTION_NONE属性》经验,为你挑选了1个好方法。

我试图了解Oracle中的隔离级别。我对NONE隔离级别有疑问。

我可以理解其他4种情况及其含义。基本上,每个锁都有一种锁类型,该锁将应用于行或表以锁定对其他事务的访问。我在代码中对此进行了测试,发现更新阻止了同一行上运行的其他事务。

如果将隔离级别设置为none,是否意味着如果有两个不同的进程写入数据库中的同一行,它将相互覆盖,或者可能损坏数据?没有交易是什么意思?会产生什么影响?

参考:http : //docs.oracle.com/javase/tutorial/jdbc/basics/transactions.html#transactions_data_integrity



1> gpeche..:

链接到的文档通常讨论RDBMS。Oracle以特定方式(称为多版本并发控制或MVCC)进行设计,该方式进一步限制了有效使用的隔离级别。这在您的链接文档中有所提示:

注意:JDBC驱动程序可能不支持所有事务隔离级别。如果驱动程序不支持调用中指定的隔离级别setTransactionIsolation,则该驱动程序可以替代更高,更严格的事务隔离级别。如果驱动程序无法替代更高的事务级别,则抛出SQLException。使用该方法DatabaseMetaData.supportsTransactionIsolationLevel确定驱动程序是否支持给定级别。

总而言之,在Oracle中,您只有两个有效的隔离级别:

    TRANSACTION_READ_COMMITTED

    TRANSACTION_SERIALIZABLE(这不像您直觉上认为的那样起作用)

要了解Oracle 实际在做什么,可以使用以下映射:

TRANSACTION_NONE 变成 TRANSACTION_READ_COMMITTED

TRANSACTION_READ_UNCOMMITTED 变成 TRANSACTION_READ_COMMITTED

TRANSACTION_READ_COMMITTED 变成 TRANSACTION_READ_COMMITTED

TRANSACTION_REPEATABLE_READ 变成 TRANSACTION_SERIALIZABLE

TRANSACTION_SERIALIZABLE 变成 TRANSACTION_SERIALIZABLE

更新

实际上这有点不对:javadoc说您不能将隔离级别设置为TRANSACTION_NONE。另请参阅此问题

推荐阅读
低调pasta_730
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有