gpt4 book ai didi

java - 使用触发器在 mysql 行中并发更新

转载 作者:行者123 更新时间:2023-11-30 23:22:52 24 4
gpt4 key购买 nike

我有一个基于 soap 的 web 服务,使用 Java + Mysql。

Web 服务包括保存和发送作为响应生成的文档。每个用户的可用文档数量有限。该服务向外部系统提供文档,因此,我必须随时了解特定用户可用的文档。

为了改进这一点,构建一个触发器,在创建新文档时更新用户行。

CREATE TRIGGER `Service`.`discount_doc_fromplan`
AFTER INSERT ON `Service`.`Doc` FOR EACH ROW
UPDATE `Service`.`User` SET User.DocAvailable = User.DocAvailable - 1 where User.id = NEW.idUser

当用户由于他们的系统而试图同时创建 2 个或更多文档时,问题就出现了。这给了我一个“试图获得锁时发现的死锁”。

有人有想法在没有死锁问题的情况下改进它,同时提供正确数量的文档吗?这是我的第一个网络服务。谢谢。

最佳答案

您正在尝试在数据库触发器中实现您的业务逻辑。您可以在 (1) Web 服务应用程序中间件或 (2) 存储过程中实现此逻辑而不是触发器。不过,我更喜欢方法 (1)。两者中的基本代码都将收集用户在 Doc 表中的所有插入,并在累积计数器中,并在所有插入结束时更新 UserDocAvailable = DocAvailable -counter 一气呵成。您可以在事务中执行此操作,以便在出现问题时可以回滚。在开始交易之前,您必须阅读用户 的可用文档配额

关于java - 使用触发器在 mysql 行中并发更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14777836/

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