我对PHP脚本和MySQL的行为很好奇。
该脚本基本上包含两个SQL查询。
第一个SELECT从特定行中获取一列的数字,由某个id决定。
然后如果数字为正,第二个会通过减去一定数量来更新该列。
显然这是一个典型情况,我需要使用事务或锁或互斥量等方法。
我的问题是这样的: 在一个网站中,完全有可能有两个或更多用户同时调用相同的行的脚本。如果不使用事务或锁表,PHP会如何处理这种情况?它们是两个查询/函数调用,但它们在一个脚本中。它会等待整个脚本返回给其对应的用户,以便为另一个用户再次运行它,还是因为它们是不同的查询,因此伪并行性可能会在多个用户调用相同的脚本时运行第一个查询,然后对于不同的组运行第二个查询。
基本上,我问这个问题是因为我正在做一些事情,而我没有足够的权限使用事务或锁定,我想知道是否可以避免互斥(我不确定这个词,基本上是为调用者创建一个新表。 在调用上述脚本之前,我将调用一个新脚本,在其中将表的布尔列设置为写入状态,因此其他人无法进行操作,而在原始脚本完成后,再将其设置回false,以便下一个用户可以进行操作等等)。
编辑: 我不确定select for update的权限是否包含在上述提到的权限中。负责回答我的问题的人很难找到,我已经厌倦了寻找他......
第一个SELECT从特定行中获取一列的数字,由某个id决定。
然后如果数字为正,第二个会通过减去一定数量来更新该列。
显然这是一个典型情况,我需要使用事务或锁或互斥量等方法。
我的问题是这样的: 在一个网站中,完全有可能有两个或更多用户同时调用相同的行的脚本。如果不使用事务或锁表,PHP会如何处理这种情况?它们是两个查询/函数调用,但它们在一个脚本中。它会等待整个脚本返回给其对应的用户,以便为另一个用户再次运行它,还是因为它们是不同的查询,因此伪并行性可能会在多个用户调用相同的脚本时运行第一个查询,然后对于不同的组运行第二个查询。
基本上,我问这个问题是因为我正在做一些事情,而我没有足够的权限使用事务或锁定,我想知道是否可以避免互斥(我不确定这个词,基本上是为调用者创建一个新表。 在调用上述脚本之前,我将调用一个新脚本,在其中将表的布尔列设置为写入状态,因此其他人无法进行操作,而在原始脚本完成后,再将其设置回false,以便下一个用户可以进行操作等等)。
编辑: 我不确定select for update的权限是否包含在上述提到的权限中。负责回答我的问题的人很难找到,我已经厌倦了寻找他......