小编Dud*_*ude的帖子

此更新,选择组合查询线程安全吗?

我有一张桌子叫做座位,它有这样的架构

身份证号

对于每个用户,我取一个随机未使用的 id 并分配给该用户,这里为简单起见,我使已使用 =1。我正在使用的查询

   update seats u inner join  (
        SELECT id from seats  
        where taken is null limit 1) s 
   on s.id = u.id set taken = 1;
Run Code Online (Sandbox Code Playgroud)

此查询随机获取一个带有标记为空的席位,对于该席位,它使标志为 1。虽然此查询工作正常,但此线程安全吗?

考虑这种情况,我有两个并行的用户。对于 user1,我选择第 X 行,就在运行更新查询之前,user2 签入,对于该用户,select 查询返回与 user1 相同的行。所以我将结束两次更新同一行。

此查询是否可能出现这种情况?

mysql locking update

6
推荐指数
1
解决办法
1852
查看次数

标签 统计

locking ×1

mysql ×1

update ×1