ユーザーアクションの数を保持するテーブルがあります。アクションが実行されるたびに、値を増やす必要があります。ユーザーは同時に複数のセッションを持つことができるため、マルチユーザーの問題を回避するには、プロセスをアトミックにする必要があります。
テーブルには 3 つの列があります。
ActionCode
なのでvarchar
UserID
なのでint
Count
なのでint
行が存在しない場合は新しい行を追加し、count を 1 に設定する関数に ActionCode
andを渡したいと思います。行が存在する場合は、カウントを 1 つ増やします。このテーブルのプライマリ ユニーク インデックスを構成します。UserID
ActionCode
UserID
更新するだけでよい場合は、次のような単純なことを行うことができます (UPDATE
クエリは既にアトミックであるため)。
UPDATE (Table)
SET Count = Count + 1
WHERE ActionCode = @ActionCode AND UserID = @UserID
SQL のアトミック トランザクションは初めてです。この質問はおそらくここで複数の部分で回答されていますが、それらを見つけたり、それらの部分を1つのソリューションに配置したりするのに苦労しています. これらのアクションは頻繁に発生する可能性があるため、複雑になることなく、これも非常に高速である必要があります。
編集:申し訳ありませんが、これは単一のクエリで存在する場合のインクリメントを行うMySQLの重複かもしれません。私はたくさん検索しましたがtsql
、私の検索では、sql
代わりに変更すると、それがトップの結果でした. それがアトミックかどうかは明らかではありませんが、そうであることは間違いありません。この質問と回答によって新しい価値が追加される可能性があると誰かが考えない限り、私はおそらくこれをだまされて削除することに投票します。