假设我使用mysql_query
在服务器上执行多个查询。每个查询的结果都会影响后续查询。在控制进入下一个调用之前,是否会完全执行mysql_query
的所有调用?
编辑:我忘了提及,我没有使用交易存储引擎。
答案 0 :(得分:6)
是的,MySQL服务器必须返回数据并在PHP进入下一个操作之前完成查询,无论是分配返回值还是进入下一行代码。
mysql_query( "INSERT INTO y VALUES (x,1)" );
mysql_query( "SELECT x FROM y WHERE z=1" );
mysql_query( "UPDATE y SET x=x+1 WHERE z=1" );
mysql_query( "SELECT x FROM y WHERE z=1" );
x将为1,然后是2,并且在第四个语句2的时间将返回到脚本。在单个PHP脚本中并行运行查询是不可能的 - 这需要并行执行或使用另一种语言(即Java)进行线程化。
答案 1 :(得分:2)
这不回答原始问题,但与问题标题有关:
如果你想要非阻塞,那么有一个准选项可行:
这是在查询中使用INSERT DELAYED语法。然后,PHP将只等待mysql响应“OK”并且不会等待实际插入发生。
答案 2 :(得分:1)
在同一个脚本和线程中,是的。来自其他PHP脚本的其他查询可能同时运行,但来自php脚本的所有查询都将阻止。
在继续之前,您将始终能够评估返回值。
答案 3 :(得分:1)
正如其他人已经提到的,PHP是一种顺序语言(即一个语句将在下一个语句之后执行),没有明确的线程支持。但你可以做的是使用mysql_unbuffered_query,它只会在返回结果的第一行之前阻塞(而不是像mysql_query那样等待所有行)。
答案 4 :(得分:0)
当您不使用事务时,无论您使用何种编程语言,MySQL都会立即提交每个查询。所以,是的,您可以依赖查询的顺序性。