当前位置: 首页 > 知识库问答 >
问题:

当PHP脚本同时多次访问MySQL数据库时会发生什么?

漆雕安晏
2023-03-14

我对PHP脚本和MySQL的行为很好奇?脚本基本上是两个SQL查询。

第一个从由某个id决定的特定行的列中选择并获取一个数字。

然后,如果数字为正数,则第二个将通过减去某个量来更新列。

很明显,这是一个典型的例子,我会使用事务、锁、互斥体等等。

我的问题是:在一个网站中,两个或更多的用户完全有可能同时调用同一行的脚本。如果不使用事务或锁定表,PHP将如何处理?它们是两个查询/函数调用,但它们在一个脚本中。它是否等待整个脚本返回到相应的用户,以便为另一个用户再次运行它,或者因为它们是不同的查询,因为伪等位性,它可能会在调用相同脚本的多个用户上运行第一个查询,然后在不同的集合上运行第二个查询...

基本上,我这样问是因为我正在做一些我没有足够权限使用事务或锁的事情,我想知道我是否可以避免互斥(我不确定这个词,基本上是一个新的表供调用者使用;在调用上面的脚本之前,我将调用一个新的脚本,在这个脚本之前,我将把表中的布尔列设置为true以供编写,这样其他人在原始脚本完成时不能使用,然后将bacl设置为false,以便下一个队列可以执行,依此类推)

编辑:我不确定选择更新是否包括在上面提到的权限。负责回答我问题的人很难找到,我已经受够了寻找他...

共有2个答案

况喜
2023-03-14

你就不能一通电话吗,这样就不重要了?

UPDATE T1
    SET T1.COLUMN = T2.COLUMN - 4
    FROM TABLE1 AS T1
    INNER JOIN TABLE2 AS T2
        ON T1.COLUMN = T2.COLUMN
    WHERE T2.COLUMN = ID
    AND T2.COLUMN > 0
滕令雪
2023-03-14

非常奇怪的是,您可以执行更新,但不能锁定表(更新是锁定某些引擎的表,锁定其他引擎的行)。但如果您确实无法锁定,则可以使用get\u lock函数。它就像互斥体一样工作。

注意:如果使用仅分配更新(set a=10),则可能会丢失一些数据。如果在字段中使用带有ref的赋值(设置a=10a),则不会发生这种情况。

 类似资料:
  • 问题内容: 我同时运行10个PHP脚本,并且在Linux上在后台处理。 例如: 在中,我遇到了数据库循环问题。其中一个进程可能已经将该字段更新为1,似乎其他php脚本进程没有看到它。例如: 如何确保流程不会再次重做相同的数据? 问题答案: 当您有多个流程时,您需要让每个流程都拥有某些记录集的“所有权”。通常,您可以通过使用limit子句进行更新,然后选择脚本“拥有”的记录来完成此操作。 例如,有一

  • 问题内容: 在具有并发访问的程序中使用映射时,是否需要在函数中使用互斥体来 读取 值? 问题答案: 读者众多,没有作家可以: https://groups.google.com/d/msg/golang- nuts/HpLWnGTp-n8/hyUYmnWJqiQJ 一个作家,没有读者是可以的。(否则,地图不会太好。) 否则,如果至少有一个作家,而作家或读者至少还有一个,那么 所有 读者 和 作家都

  • 我目前有一个类似以下的数据库结构。如果无法在Firebase实时数据库安全规则中循环,我如何基于用户对多个组的访问来保护数据?要遵循的例子... 数据库结构: 我如何在上指定安全规则,以基于中指定的任何组与当前用户的

  • 问题内容: 我知道Java I / O使用装饰器模式。但是我觉得我理解它的错。 请说明两个代码段之间的区别: 片段1: 该应用程序符合我的期望,并且在控制台中看到结果。 片段2: 我尝试两次包装ObjectInputStream和ObjectOutputStream: 这段代码只是挂断了。我不明白为什么。请澄清。 聚苯乙烯 这仅仅是理论问题。 更新 真正的挂断行为是因为我使用管道而发生的(根据EJ

  • 到现在为止,我已经在解决我的问题很长时间了,我找不到合适的解决方案。 我需要顺序访问不同的数据库。我试图更改到数据库的链接,正如你在下面的代码中看到的那样。 到目前为止,这在某种程度上是可行的。问题是应用程序需要重新加载才能从我的应用程序中读取更改。属性来连接到另一个数据库,这对我来说并不是一个真正的解决方案,因为应用程序会重新启动。它还必须是动态可变的,因为我正在处理30多个数据库。 也许你们可

  • 问题内容: 如果PHP引擎已经在服务器上执行脚本的过程中,其他同时向同一脚本发出的浏览器请求又会如何? 请求会排队吗? 他们会被忽略吗? 每个请求都会有自己的脚本实例吗? 还有其他可能性吗? 问题答案: 根据服务器的配置,服务器通常可以同时处理 数百个请求 -如果使用Apache,则 配置选项就是这样: 该指令设置了将同时服务的请求数的限制。 任何超出 限制的连接尝试 通常都会排队,最多可以排队一