19

原子性和一致性有什么区别?在我看来,两者都在用不同的词说同样的话。

原子性

事务的所有任务都已执行或都不执行。没有部分交易。例如,如果一个事务开始更新 100 行,但在 20 次更新后系统失败,则数据库回滚对这 20 行的更改。

一致性

事务将数据库从一种一致状态变为另一种一致状态。例如,在借记储蓄账户并贷记支票账户的银行交易中,失败不得导致数据库仅贷记一个账户,否则会导致数据不一致。

并且看起来原子性是一致性的子集,那么它应该是 cid(conistency,isolation,duribility) ,没有原子性

4

3 回答 3

19

原子性确实是说每个事务要么全有要么全无,这意味着它的所有操作都被执行或不执行,并且没有部分操作。

但是,一致性谈论确保任何事务都将数据库从一种有效状态带到另一种有效状态。写入数据库的任何数据都必须根据所有定义的规则有效,包括但不限于约束、级联、触发器及其任何组合 (取自维基百科)。这基本上意味着只将有效状态写入数据库,并且如果事务不违反数据一致性,则将执行该事务,否则将回滚。

希望它能为你解决问题。

于 2012-09-30T20:35:38.743 回答
5

简单解释为了一致性:如果数据库中的字段类型是整数,它应该只接受整数值而不接受其他类型。如果你想在这个字段中存储其他类型,就会违反一致性。在这种情况下,事务将回滚。

于 2014-10-22T14:44:04.083 回答
0

原子性
一组语句仅以 100 条语句为例,这些语句也可以是插入语句,如果任何一条语句在处理过程中失败,则应恢复剩余语句,这意味着数据库应返回原始状态。

autocommit = false

try{
   statement one ;
   statement two ;
   statement three;
}
catch (){rollback;}
finally(){commit;}

一致性: 如果您尝试将日期插入需要满足约束的数据库,级联,触发器就像您尝试将数据插入数据库但表具有主键约束,因此您计划插入的数据应该满足主要关键约束。

隔离: 如果两个进程在数据库上运行,假设一个正在读取,另一个正在将数据写入数据库。读取线程应该只读取提交的数据,不应该是内存中的数据

持久 性:一旦事务数据提交到数据库应该是同一阶段,它不应该影响电源故障或系统崩溃任何其他

于 2017-03-14T09:11:01.637 回答