如果你有 100 000 个用户,MySQL 是否同时执行一个 SQL 查询?
因为在我的 PHP 代码中我检查某一行是否存在;如果没有,它会创建一个。如果是,它只会更新行计数器。
我突然想到,也许有 100 个用户同时检查该行是否存在,如果不存在,他们就各自创建一行。
如果MySQL按顺序处理它们,我知道这不会成为问题,然后一个用户将检查它是否存在,如果不存在,则创建它。另一个用户将检查它是否存在,既然如此,它只是更新计数器。
但是,如果他们同时检查它是否存在,假设不存在,那么他们都会创建一行,整个表结构将失败。
如果有人能够阐明这个主题,那就太好了。
最佳答案
使用 UNIQUE 约束,或者如果可行,将主键设为数据项之一,SQL Server 将防止创建重复行。如果该行已存在,您甚至可以使用“ON DUPLICATE KEY UPDATE ...”语法来指定备用操作。
根据您的评论,听起来您可以使用 user_id 作为主键,在这种情况下,您可以使用如下内容:
INSERT INTO usercounts (user_id,usercount)
VALUES (id-goes-here,1)
ON DUPLICATE KEY UPDATE usercount=usercount+1;
关于MySQL 当时正在处理一个 SQL 查询吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2270212/