我只是读约RDBMS, 和一个财产数据库是 原子性。因此,如果金钱是撤销 从一个帐户,并转移到 另一个交易 将会发生完全或没有 在所有。有没有的部分 交易。但是如何实际上 保证?

Sql queries于上述情况 可能看起来像 (i)更新 accounts 设定的平衡=衡量在ac_num=101 (ii)更新 accounts 设定的平衡=余额+量在ac_num=102

这不意味着可确保原子..那么它是怎样实际上会发生?

有帮助吗?

解决方案

如果您

BEGIN TRANSACTION
UPDATE accounts set balance = balance - amount WHERE ac_num = 101
UPDATE accounts set balance = balance + amount WHERE ac_num = 102
COMMIT TRANSACTION

在数据库系统就会写笔记什么是已为在帐户101修改完成,然后如果帐户102的工作将失败,RDBMS使用这些笔记撤消工作在101。

此外,当它已经开始在考虑101的工作是需要在数据库上的锁,所以没有其他人可以在帐户101来读取更新,但尚未提交的数据。 (这里锁是基本上只是一个音符的地方:“我在这里工作,不要碰。”)

其他提示

是原子交易的需要:

  • 防止其他事务的干扰的行他们正在编写或阅读
  • 确保所有或没有任何改变的事务,将在该数据库时的事务提交。

第一个是通过 锁定 行交易读或写在它的执行。

第二个是这样做交易写入他们的行动 交易日志.这使得数据库能够恢复即使在服务器丧失功率在交易。在这种情况下的恢复过程中会读到的日志,确保活动(uncommited)交易得到中止和改变由他们都被取消。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top