【发布时间】:2011-11-14 19:07:14
【问题描述】:
我正在浏览有关 Transaction 的 ACID 属性,并在不同的站点上遇到了以下语句 ACID 是事务保证的四个属性的首字母缩写词:原子性、一致性、隔离性和持久性。
**我的问题是关于这个短语的。
由交易保证
**。根据我的经验,这些属性没有被照顾 自动交易。但作为 Java 开发人员,我们需要确保满足这些属性标准。
让我们来看看每个属性:-
原子性:- 假设当我们创建客户时,也应该创建帐户,因为这是强制性的。所以现在在交易期间 在创建帐户期间创建了客户,但出现了一些异常。因此,开发人员现在可以采取两种方式:要么回滚 完成事务(在这种情况下满足原子性)或者他提交事务,因此将创建客户但不是 帐户(这违反了原子性)。所以责任在于开发者?
一致性:- 同样的原因也适用于一致性
隔离:- 根据定义,隔离使事务的执行不受其他进程或事务的干扰。
但这是在我们将隔离级别设置为 Serializable 时实现的。否则在另一种情况下,例如已提交读或未提交读 更改对其他事务可见。所以开发者有责任用 Serializable 真正隔离它吗?持久性:- 如果我们提交事务,那么即使应用程序崩溃,它也应该在应用程序重新启动时提交。不确定是否需要由开发人员或数据库供应商/事务处理?
因此,据我了解,这些 ACID 属性不能自动得到保证;相反,我们作为开发人员应该实现它们。请告诉我 如果以上对每一点的理解是正确的?如果你们能回答每一点,将不胜感激(是/否也可以。
根据我的理解,读取提交应该是大多数应用程序中最符合逻辑的隔离级别,尽管它也取决于要求。
【问题讨论】:
-
所有答案或多或少都假设事务仅由数据库实现。这是不正确的。事务是一个通用概念,可以由许多不同的软件基础架构组件实现:中间层应用服务器、事务监视器、消息传递系统、对象请求代理等等。
-
隔离级别是非常特定于数据库的。例如,Oracle 不提供读取未提交的隔离级别。无论如何,已提交读是 oracle 的默认隔离级别。
-
这个问题值得更多支持
标签: java oracle transactions