【问题标题】:Issue SQL statement at the exact same time同时发出 SQL 语句
【发布时间】:2014-04-14 04:45:33
【问题描述】:

我目前正在开发一个 PHP Web 应用程序并使用 MySQL(xampp 默认设置)作为我的 dbms。我的问题是不同的用户可以连接到网络应用程序并同时EXACT发出更新查询。

这是一个例子,

前 10 行(info_id 1 到 10)数据包含 info_update = TRUE

For example
**User 1 issue**
UPDATE info SET reply='helloworldOne' WHERE info_id = (SELECT info_id FROM table WHERE info_update = 'TRUE' ORDER BY info_id DESC); 

**User 2 issue**
UPDATE info SET reply='helloworldTwo' WHERE info_id = (SELECT info_id FROM table WHERE info_update = 'TRUE' ORDER BY info_id DESC); 

**User 3 issue**
UPDATE info SET reply='helloworldThree' WHERE info_id = (SELECT info_id FROM table WHERE info_update = 'TRUE' ORDER BY info_id DESC); 

and so on....

我想要做的是所有这些查询都可以更新到不同的行,直到 info_id (10)。因此,用户 11 将自动发出(在我的代码中完成)INSERT 查询,因为表中不再存在 info_update = TRUE。

1) 我的问题是,如果这些查询同时向 dbms 发出,那么上述所有查询都会更新到同一行(info_id)吗?

2) 如果 Q1 的答案是否定的,我可以说“SELECT info_id FROM table WHERE info_update = 'TRUE' ORDER BY info_id DESC”在这种情况下会生成不同的 info_id 而不是 info_id (10)对于每个查询?

3) 我是否需要使用 RabbitMQ 对所有这些请求进行排队,以便请求一一执行,执行用户 1 请求,然后执行用户 2 请求,然后执行用户 3 请求?无论如何,我是 RabbitMQ 的新手,所以我不确定 RabbitMQ 是否可以做到这一点....

【问题讨论】:

    标签: php mysql sql concurrency rabbitmq


    【解决方案1】:

    据我所知,MySQL 在内部解决了这些问题,这意味着它会自动锁定正在更新的行,您可以在此处阅读更多信息:

    https://dev.mysql.com/doc/refman/5.1/en/internal-locking.html

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-08
      • 1970-01-01
      • 1970-01-01
      • 2017-11-26
      • 2013-04-24
      相关资源
      最近更新 更多