gpt4 book ai didi

mysql - SQL行锁和事务

转载 作者:行者123 更新时间:2023-11-29 16:05:36 25 4
gpt4 key购买 nike

我对关系数据库非常陌生。我正在开发一个涉及财务的项目,因此我希望任何影响平衡的操作不会同时发生,并且我想使用锁来实现这一点,但我不确定如何使用它们。我现在的愿景:我希望为每个操作建立一个单独的表,并在用户表中建立一个余额字段,其值将从所有相关表中派生出来。令人遗憾的是,我实际上永远不会更新现有记录 - 只是添加它们。我想确保在这些表中一次只插入每个用户的一条记录。例如:3 个事务同时发生,因此 3 条记录将被添加到任何相关表中。其中两条记录具有相同的用户 ID,即我的用户表的外键,另一条记录具有不同的外键。我希望具有相同外键的记录能够被管道化,而另一条记录可以随时完成。我该如何实现这一目标?有没有更好的方法来解决这个问题?

最佳答案

I want any actions that affect balance not to occur at the same time

为什么?

I want to achieve that using locks

为什么?

举个反例。假设您想避免出现负账户余额。当用户提取 500 美元时,如何在没有锁的情况下对其进行建模。

UPDATE accounts
SET balance = balance - 500
WHERE accountholderid = 42
AND balance >= 500

这无需任何显式锁定即可工作,并且对于并发访问来说是安全的。您必须检查更新计数,如果为 0,您就会 overdraw 帐户。

(我知道 MySQL 仍然会获取行锁)

拥有一个账本仍然有意义,但即使在那里,对锁的需求对我来说并不明显。

关于mysql - SQL行锁和事务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55774970/

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