我正在寻找数据库的各种ACID属性的真实示例。
答案 0 :(得分:38)
原子性 - 将资金从一个帐户转移到另一个帐户的交易涉及从第一个帐户进行提款操作,在第二个帐户进行存款操作。如果存款操作失败,您也不希望撤销操作发生。
一致性 - 跟踪支票帐户的数据库可能只允许每笔交易存在唯一的支票号
隔离 - 查询余额的柜员必须与涉及从同一帐户提款的并发交易隔离。只有当提款交易成功提交并且出纳员再次查看余额时,才会报告新的余额。
持久性 - 系统崩溃或任何其他故障不得丢失事务或数据库内容的结果。耐用性通常通过单独的事务日志来实现,这些事务日志可以从某个选定的时间点(如备份)“重新创建”所有事务。
(来自le dorfier link的现实世界的例子摘要)
答案 1 :(得分:9)
•原子性 - 从用户的角度来看,事务要么完整地完成(即所有相关的数据库表都已更新),要么根本不完成。如果发生错误或中断,则取消对该点所做的所有更改。
•一致性 - 每个事务都维护数据库中的所有完整性条件,使数据库从一个一致状态进入另一个一致状态。
•隔离 - 每个事务都与其他事务隔离,因此,每个事务只访问属于一致数据库状态的数据。
•持久性 - 如果已将事务报告给用户完成,则对数据库的更改将在后续硬件或软件故障后生效。
答案 2 :(得分:2)
使用任何给定的perl脚本来操作关系数据库中的数据,在其顶部放置一个“BEGIN”,在底部放置一个“COMMIT”,你知道perl脚本有效,或者没有完全影响你的数据库(除非你在mysql上插入DDL语句)。在设计健壮的软件(以及我最喜欢的属性)时,原子性是非常强大的。