我有一个记录用户操作的表。每完成一个动作,价值就需要增加。由于用户可以同时拥有多个会话,因此该进程需要是原子的以避免多用户问题。
该表有 3 列:
ActionCode
作为varchar
UserID
作为int
Count
作为int
我想将ActionCode
and传递UserID
给一个函数,如果一个新行不存在,它将添加一个新行,并将计数设置为 1。如果该行确实存在,它只会将计数增加一。 ActionCode
并UserID
构成该表的主唯一索引。
如果我需要做的只是更新,我可以做一些简单的事情(因为UPDATE
查询已经是原子的):
UPDATE (Table)
SET Count = Count + 1
WHERE ActionCode = @ActionCode AND UserID = @UserID
我是 SQL 中原子事务的新手。这个问题可能已经在这里的多个部分得到了回答,但我很难找到这些部分并将这些部分放在一个解决方案中。这也需要非常快,不要变得复杂,因为这些操作可能会经常发生。
编辑:对不起,这可能是MySQL 如何在单个查询中执行 if exists increment的欺骗。我搜索了很多,但tsql
在我的搜索中,一旦我改为sql
改为,那是最好的结果。这是否是原子的并不明显,但可以肯定的是。我可能会投票删除这个作为欺骗,除非有人认为这个问题和答案可以增加一些新的价值。