Oli*_*ter 1 sql t-sql database sql-server sql-server-2014
SQL业余爱好者.
我有一张包含优惠券代码的表格:
id voucherCode UserId
------------------------
1 abcde 13
2 bcdef 11
3 cdefg
4 defgh
Run Code Online (Sandbox Code Playgroud)
现在,如果我的一个用户有资格获得优惠券代码,我会从我的表中获得一个:
SELECT TOP 1 * FROM tableName WHERE UserId IS NULL;
UPDATE tableName SET UserId = @UserID WHERE id = @SelectedIdFromAboveSelect;
Run Code Online (Sandbox Code Playgroud)
我必须确保每行只选择一次.如果多个用户需要凭证代码,则SELECT
和之间存在小的时间差UPDATE
.如果然后SELECT
执行第二次,则SELECT
第二次可以是同一行.我该如何预防呢?