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