在同一时间发出SQL语句

时间:2014-04-14 04:45:34

标签: php mysql sql concurrency rabbitmq

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

这是一个例子,

前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是否可以做到这一点....

1 个答案:

答案 0 :(得分:0)

据我所知,MySQL在内部解决了这些问题,这意味着它会自动锁定正在更新的行,你可以在这里阅读更多相关内容:

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