我正在学习有关事务的ACID属性,并在不同的网站上看到了以下陈述。
ACID 是事务所保证的四个属性的首字母缩写:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)和持久性(Durability)。
我的问题是“guaranteed by transactions”这个短语。
根据我的经验,这些属性并不会自动得到满足。但是作为Java开发人员,我们需要确保这些属性的准则得到满足。
让我们来分别了解每个属性:
1. 原子性:假设当我们创建客户时,账户也应该被创建,因为这是必须的。那么在事务期间,如果在创建账户时出现了异常,开发人员可以采取两种方式:要么回滚整个事务(在这种情况下满足原子性),要么提交事务,那么客户将被创建,但账户不会被创建(这违反了原子性)。因此责任在于开发人员吗?
2. 一致性:对于一致性也是同样的道理。
3. 隔离性:根据定义,隔离性使事务在没有其他进程或事务干扰的情况下执行。但是只有在我们将隔离级别设置为 Serializable 时,才能实现这一点。否则,在另一种情况下,例如读取提交或读取未提交,更改内容对其他事务可见。因此,开发人员需要确保使用 Serializable 实现真正的隔离性吗?
4. 持久性:如果我们提交了事务,即使应用程序崩溃,在应用程序重新启动时也应该提交。不确定这是否需要由开发人员或数据库供应商/事务处理?
因此,根据我的理解,这些ACID属性并不是自动保证的;相反,我们作为开发人员需要实现它们。请让我知道对于每个点的上述理解是否正确?如果您可以为每个点回复一下(是/否也可以),我们将不胜感激。
根据我的理解,在大多数应用程序中,读取提交应该是最合适的隔离级别,尽管这也取决于要求。
ACID 是事务所保证的四个属性的首字母缩写:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)和持久性(Durability)。
我的问题是“guaranteed by transactions”这个短语。
根据我的经验,这些属性并不会自动得到满足。但是作为Java开发人员,我们需要确保这些属性的准则得到满足。
让我们来分别了解每个属性:
1. 原子性:假设当我们创建客户时,账户也应该被创建,因为这是必须的。那么在事务期间,如果在创建账户时出现了异常,开发人员可以采取两种方式:要么回滚整个事务(在这种情况下满足原子性),要么提交事务,那么客户将被创建,但账户不会被创建(这违反了原子性)。因此责任在于开发人员吗?
2. 一致性:对于一致性也是同样的道理。
3. 隔离性:根据定义,隔离性使事务在没有其他进程或事务干扰的情况下执行。但是只有在我们将隔离级别设置为 Serializable 时,才能实现这一点。否则,在另一种情况下,例如读取提交或读取未提交,更改内容对其他事务可见。因此,开发人员需要确保使用 Serializable 实现真正的隔离性吗?
4. 持久性:如果我们提交了事务,即使应用程序崩溃,在应用程序重新启动时也应该提交。不确定这是否需要由开发人员或数据库供应商/事务处理?
因此,根据我的理解,这些ACID属性并不是自动保证的;相反,我们作为开发人员需要实现它们。请让我知道对于每个点的上述理解是否正确?如果您可以为每个点回复一下(是/否也可以),我们将不胜感激。
根据我的理解,在大多数应用程序中,读取提交应该是最合适的隔离级别,尽管这也取决于要求。