📜  DBMS 中的 ACID 属性

📅  最后修改于: 2021-09-27 22:35:37             🧑  作者: Mango

事务是访问并可能修改数据库内容的单个逻辑工作单元。事务使用读写操作访问数据。
为了保持数据库中的一致性,在事务之前和之后,遵循某些属性。这些被称为ACID属性。

原子性
在这里,我们的意思是整个交易要么立即发生,要么根本不发生。没有中途,即交易不会部分发生。每个事务都被视为一个单元,要么运行完成,要么根本不执行。它涉及以下两个操作。
中止:如果事务中止,对数据库所做的更改将不可见。
提交:如果事务提交,所做的更改是可见的。
原子性也被称为“全有或全无规则”。

考虑以下由 T1T2组成的交易 T :从账户X向账户Y转账 100。

如果交易在T1完成后但在T2完成之前失败。(例如,在write(X) 之后但在write(Y)之前),则金额已从X 中扣除但未添加到Y 中。这会导致数据库状态不一致。因此,事务必须完整地执行,以确保数据库状态的正确性。

一致性
这意味着必须维护完整性约束,以便数据库在事务前后保持一致。它指的是数据库的正确性。参考上面的例子,
必须保持交易前后的总金额。
T 发生前的总数= 500 + 200 = 700
T 发生后的总数 = 400 + 300 = 700
因此,数据库是一致的如果 T1完成但T2失败,则会出现不一致。结果 T 是不完整的。

隔离
这个属性保证了多个事务可以同时发生,而不会导致数据库状态的不一致。事务独立发生而不受干扰。特定事务中发生的更改将不会对任何其他事务可见,直到该事务中的特定更改写入内存或已提交。此属性确保并发执行事务将导致状态等同于以某种顺序连续执行的状态。
X = 500, Y = 500。
考虑两个事务TT”。

假设T已经执行到Read (Y)然后T”开始。结果,由于 T”读取正确的X值但不正确的Y值和计算的总和,会发生操作的交错
T”: (X+Y = 50, 000+500=50, 500)
因此与交易结束时的金额不一致:
T: (X+Y = 50, 000 + 450 = 50, 450)
由于丢失了 50 个单位,这会导致数据库不一致。因此,事务必须独立进行,并且只有在对主内存进行更改后才能看到更改。

耐用性:
此属性可确保一旦事务完成执行,对数据库的更新和修改将存储并写入磁盘,并且即使发生系统故障它们也会持续存在。这些更新现在成为永久性的并存储在非易失性存储器中。因此,交易的效果永远不会丢失。

总的来说,ACID 属性提供了一种机制来确保数据库的正确性和一致性,使得每个事务都是一组操作,这些操作充当单个单元,产生一致的结果,与其他操作隔离并更新它产品持久保存。