MySQL 当时正在处理一个 SQL 查询吗?

标签 mysql database

如果你有 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/

相关文章:

java - 在 myBatis <association> 中传递多个列

mysql - 如何删除我机器中的所有数据库而不是将它们一一删除?

python - 使用具有现有数据库 ID 字段的 Django 问题

c# - SQL 查询到 Lambda C#

mysql - 使用两个不同的 WHERE 条件更新 MySQL 中的两个表

mysql - AWS : Unable to connect Amazon QuickSight to RDS

c# - 用数据库查询结果填充列表框

SQL 表 : Can I Pivot/Join with N rows?

php - 多维数组表填充

mysql - 带两个变量的Sql累积计数