gpt4 book ai didi

sql - 确保原子性 sql

转载 作者:行者123 更新时间:2023-12-04 18:17:23 24 4
gpt4 key购买 nike

我只是在阅读 RDBMS,
RDBMS 的一个属性是
原子性。所以,如果取钱
从一个帐户并转移到
另一个,要么是交易
会不会完全发生
根本。没有部分
交易。但实际上如何
确保?

上述场景的Sql查询
可能看起来像
(i) 更新 accounts设置余额 = 余额 - 金额 WHERE ac_num = 101
(ii) 更新 accounts设置余额 = 余额 + 金额 WHERE 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 中更新但未提交的数据。
(这里的锁基本上只是某个地方的注释“我在这里工作,不要碰。”)

关于sql - 确保原子性 sql,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/692544/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com