我试图了解Oracle中的隔离级别。我对NONE隔离级别有疑问。
我可以理解其他4种情况及其含义。基本上,每个锁都有一种锁类型,该锁将应用于行或表以锁定对其他事务的访问。我在代码中对此进行了测试,发现更新阻止了同一行上运行的其他事务。
如果将隔离级别设置为none,是否意味着如果有两个不同的进程写入数据库中的同一行,它将相互覆盖,或者可能损坏数据?没有交易是什么意思?会产生什么影响?
参考:http : //docs.oracle.com/javase/tutorial/jdbc/basics/transactions.html#transactions_data_integrity
链接到的文档通常讨论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。另请参阅此问题