gpt4 book ai didi

SQL Server : add row if doesn't exist, 一列的增量值,原子

转载 作者:行者123 更新时间:2023-12-02 17:47:54 25 4
gpt4 key购买 nike

我有一个表来记录用户操作的计数。每完成一个 Action ,值(value)就需要增加。由于用户可以同时拥有多个 session ,因此该过程需要是原子的,以避免多用户问题。

该表有 3 列:

  • ActionCodevarchar
  • UserIDint
  • 计数int

我想将 ActionCodeUserID 传递给一个函数,该函数将添加一个新行(如果尚不存在),并将计数设置为 1。如果该行确实存在,它只会将计数加一。 ActionCodeUserID 构成该表的主唯一索引。

如果我需要做的只是更新,我可以做这样简单的事情(因为 UPDATE 查询已经是原子的):

UPDATE (Table)
SET Count = Count + 1
WHERE ActionCode = @ActionCode AND UserID = @UserID

我对 SQL 中的原子事务不熟悉。这个问题可能已经在此处的多个部分得到了回答,但我很难找到这些部分并将这些部分放入一个解决方案中。这也需要非常快,但不能变得复杂,因为这些操作可能会频繁发生。

编辑:抱歉,这可能是 MySQL how to do an if exist increment in a single query 的骗局。我搜索了很多,但搜索中有 tsql,一旦我改为 sql,那就是最重要的结果。尚不清楚这是否是原子的,但很肯定它是原子的。我可能会投票删除这个作为欺骗,除非有人认为这个问题和答案可以增加一些新的值(value)。

最佳答案

假设您使用的是 SQL Server,要创建单个原子语句,您可以使用 MERGE

MERGE YourTable AS target
USING (SELECT @ActionCode, @UserID) AS source (ActionCode, UserID)
ON (target.ActionCode = source.ActionCode AND target.UserID = source.UserID)
WHEN MATCHED THEN
UPDATE SET [Count] = target.[Count] + 1
WHEN NOT MATCHED THEN
INSERT (ActionCode, UserID, [Count])
VALUES (source.ActionCode, source.UserID, 1)
OUTPUT INSERTED.* INTO #MyTempTable;

更新 如有必要,使用输出来选择值。代码已更新。

关于SQL Server : add row if doesn't exist, 一列的增量值,原子,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13693302/

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