英文:
Why is TRANSACTION_READ_COMMITTED the default in Java?
问题
事务教程在使用事务维护数据完整性一节中进行了解释:
默认事务隔离级别取决于您的DBMS。例如,对于Java DB,它是TRANSACTION_READ_COMMITTED。
对于我的Postgresql数据库也是一样。但是这似乎不是最佳选择,因为只有TRANSACTION_SERIALIZABLE
能够防止所有的不一致性:
隔离级别 │事务 │脏读 │不可重复读 │幻读
===============================================================================
TRANSACTION_NONE │不支持 │不适用 │不适用 │不适用
TRANSACTION_READ_COMMITTED│支持 │被阻止 │允许 │允许
TRANSACTION_READ_UNCOMMITTED│支持 │允许 │允许 │允许
TRANSACTION_REPEATABLE_READ│支持 │被阻止 │被阻止 │允许
TRANSACTION_SERIALIZABLE │支持 │被阻止 │被阻止 │被阻止
为什么不选择默认的最佳选项?
英文:
The transaction tutorial explains in the section Using Transactions to Preserve Data Integrity:
> The default transaction isolation level depends on your DBMS. For example, for Java DB, it is TRANSACTION_READ_COMMITTED.
For my Postgresql database it is the same. But this does not seem to be the best, because only TRANSACTION_SERIALIZABLE
prevents all inconsistencies:
<!-- language: none -->
Isolation Level │Transactions │Dirty Reads │Non-Repeatable Reads│Phantom Reads
=============================================================================================
TRANSACTION_NONE │Not supported│Not applicable│Not applicable │Not applicable
TRANSACTION_READ_COMMITTED │Supported │Prevented │Allowed │Allowed
TRANSACTION_READ_UNCOMMITTED│Supported │Allowed │Allowed │Allowed
TRANSACTION_REPEATABLE_READ │Supported │Prevented │Prevented │Allowed
TRANSACTION_SERIALIZABLE │Supported │Prevented │Prevented │Prevented
Why is not the best option the default?
答案1
得分: 4
有事务安全性和性能之间的反向关系。
如果您选择了最佳隔离级别,则性能也会最差。
您必须在两者之间做出权衡。
有关更多详细信息,请参见此基准测试。
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论