数据库是否可以支持"原子性"但不支持"一致性",反之亦然?

rkg*_*rkg 15 database database-design consistency atomicity

我正在阅读有关数据库的ACID属性.原子性和一致性似乎非常密切相关.我想知道是否有任何情况我们需要支持Atomicity但不支持Consistency,反之亦然.一个例子真的会有所帮助!

pax*_*blo 18

他们有些关联,但有细微的差别.

原子性意味着您的交易发生或不发生.

一致性意味着强制实施参照完整性等内容.

假设您开始一项交易以添加两行(信用卡和借记卡,形成单个银行交易).这种原子性与数据库的一致性无关.所有这意味着它将同时添加两行或两行.

在一致性方面,比方说你有一个外键约束ordersproducts.如果您尝试添加一个引用不存在产品的订单,那么当一致性启动时就会阻止您执行此操作.

两者都是关于将数据库维持在可行状态,因此它们的相似性.前一个例子将确保银行不会赔钱(或从您那里窃取),后者将确保您的申请不会对您不了解的产品订单感到惊讶.


Mat*_*ell 7

原子性:

在原子事务中,一系列数据库操作全部发生,或者什么都不发生.原子性的保证阻止了数据库的更新仅部分发生,这可能导致比完全拒绝整个系列更大的问题.

一致性:

在数据库系统中,一致的事务是在执行期间不违反任何完整性约束的事务.如果事务使数据库处于非法状态,则会中止该事务并报告错误

如果事务成功完成,则支持原子性但不保持一致性的数据库将允许使数据库处于不一致状态(即违反参照或其他完整性检查)的事务.例如,您可以将字符串添加到int列,前提是执行此操作的事务已成功完成.

相反,支持一致性但不支持原子性的数据库将允许部分事务完成,只要该事务的效果不会破坏任何完整性检查(例如,外键必须与现有标识匹配).例如,您可以尝试添加一个包含字符串和int值的新行,即使插入失败了一半数据,也可以允许该行,前提是没有丢失的数据用于所需的列且没有数据被插入到错误输入的列中.

话虽如此,一致性依赖于原子性来逆转不一致的事务.