当前位置:  开发笔记 > 数据库 > 正文

确保原子性sql

如何解决《确保原子性sql》经验,为你挑选了1个好方法。

我刚刚阅读有关RDBMS的内容,而RDBMS的一个属性是原子性.因此,如果从账户中提取资金并转移到另一个账户,则交易将完全发生或根本不发生.没有部分交易.但实际上如何确保?

上述场景的SQL查询可能看起来像(i)UPDATE accountsset balance = balance - amount WHERE ac_num = 101(ii)UPDATE accountsset balance = balance + amount WHERE ac_num = 102

这绝不是确保原子性的.那么它究竟是如何发生的呢?



1> leiflundgren..:

如果你这样做

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中更新但未提交的数据.(此处的锁定基本上只是一个注释"我在这里工作,不要碰.")

推荐阅读
路人甲
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有