ACID属性中的原子性和隔离性有什么区别?

8

数据库管理系统中原子性和隔离性的区别有些模糊,因此我希望能够清楚地了解两者之间的区别。

在经典数据库事务中,通过使用提交协议来确保原子性和隔离性。该协议用于将临时存储转换为永久存储——也就是说,在提交协议验证存储的数据之前,对事务数据的更新是不可见的。请注意,数据库日志中存在提交记录有效地验证了事务的数据。


有些教程展示了上述定义,但我并不清楚,请问有人可以帮助我吗? - tamil
这可能会有帮助 https://dev59.com/Jm865IYBdhLWcg3wlvqq#3740307 - yesemsanthoshkumar
可能是ACID和数据库事务?的重复问题。 - yesemsanthoshkumar
似乎隔离是原子性的必然结果。感觉有点多余。 - B T
3个回答

9

原子性描述了一个单独的事务中的行为,隔离性则描述了一个或多个事务之间的行为。

原子性: 一个事务中的所有数据库操作要么全部执行,要么全部不执行。

隔离性: 每个事务似乎都在与其他事务隔离的环境中执行。


1
惊人的答案!! - LookIntoEast

2

原子性: 事务中的所有操作作为单个单元执行。

隔离性: 事务不会看到其他事务的中间更改。

根据这些定义,隔离性只是原子性的一部分。因为当其他事务可以看到我们事务的中间影响时,我们事务的操作不能被视为单个原子单元。


1

原子性意味着如果一个事务包含多个操作,要么全部执行,要么全部不执行。

令人费解的是,这个定义仍然允许将操作与其他事务交错进行。因此,原子性本身并不能保证隔离性。

例子:事务A和B都包含两个操作:

Transaction A:
A1: Read Alice's account balance
A2: Add 100 and write it back to Alice's balance

Transaction B:
B1: Read Alice's account balance
B2: Add 50 and write it back to Alice's balance

假设现在艾丽斯的余额为0,交易A和B以A1-B1-B2-A2的顺序同时发生,最终余额是多少?是100。
A和B都是原子提交的,也就是说它们的所有操作都已经发生。但是没有正确的隔离,结果可能不是你想要的。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接