Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/265.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php MySQL 2按顺序更新查询,第二个不等待第一个的结束_Php_Mysql - Fatal编程技术网

Php MySQL 2按顺序更新查询,第二个不等待第一个的结束

Php MySQL 2按顺序更新查询,第二个不等待第一个的结束,php,mysql,Php,Mysql,我正在使用MySQL 5.5.34(InnoDB)和工作台。 我正在运行以下查询: UPDATE Product SET PRD_CostoEuro = ROUND(PRD_CostoEuro * 1, 5), PRD_UpdateDate = sysdate() WHERE PRD_FlagPC = 1; UPDATE Product SET PRD_SpeseEuro = ROUND(PRD_CostoEuro * 0.20000, 5), PRD_UpdateDate

我正在使用MySQL 5.5.34(InnoDB)和工作台。 我正在运行以下查询:

UPDATE Product
SET
PRD_CostoEuro = ROUND(PRD_CostoEuro * 1, 5), 
PRD_UpdateDate = sysdate()  
WHERE  
PRD_FlagPC = 1;

UPDATE Product  
SET 
PRD_SpeseEuro = ROUND(PRD_CostoEuro * 0.20000, 5), 
PRD_UpdateDate = sysdate()  
WHERE  
PRD_FlagPC = 1;
我知道我可以有一个查询,但这是一个例子来解释我的问题

我希望两个查询都会更新相同数量的行,但第二个查询返回0。 如果我逐个运行2个查询,它们会更新相同数量的行,但如果我从工作台使用query/Execute All选项,则会在日志下面显示:

15:10:00    UPDATE Product SET PRD_CostoEuro = ROUND(PRD_CostoEuro * 1, 5),  PRD_UpdateDate = sysdate()   WHERE   PRD_FlagPC = 1    
3820 row(s) affected Rows matched: 3820  Changed: 3820  Warnings: 0 0.093 sec

15:10:01    UPDATE Product   SET  PRD_SpeseEuro = ROUND(PRD_CostoEuro * 0.20000, 5),  PRD_UpdateDate = sysdate()   WHERE   PRD_FlagPC = 1   
0 row(s) affected Rows matched: 3820  Changed: 0  Warnings: 0   0.094 sec
您知道为了在启动第二个查询之前等待第一个查询的结束,我必须在MySQL中使用什么参数吗

我也尝试过使用PHP,但是我得到了相同的结果,如果我在两个查询之间设置一个sleep(2),那么它是有效的,但我不喜欢这种解决方法


任何帮助都将不胜感激。

一步到位

UPDATE Product
SET
PRD_CostoEuro = ROUND(PRD_CostoEuro * 1, 5), 
PRD_SpeseEuro = ROUND(ROUND(PRD_CostoEuro * 1, 5) * 0.20000, 5), 
PRD_UpdateDate = sysdate()  
WHERE  
PRD_FlagPC = 1;
另一个想法是:


您的testdata在PRD_CostoEuro字段中仅包含0或空值。对于您的第一条语句,这里只影响PRD_UpdateDate字段。在第二条语句中,没有行受到影响,因为PRD_UpdateDate与sysdate相同。

使用事务使其工作。完成,但得到相同的结果。完成,锁定表产品写入;但我得到了同样的结果。我唯一的想法是在一条语句中更新所有列…我知道我可以做到,但我想了解为什么会发生这种情况,并修复我的mysql安装。第一次更新PRD_CostoEuro,第二次更新PRD_SpeseEuro,两者都不是0或NULL,因此,可能有一些东西需要更新,但在这种情况下,第二个将只更新PRD_UpdateDate。在第二个查询中,我将PRD_UpdateDate=sysdate()更改为PRD_UpdateDate=(sysdate()+10),现在两个查询都在更新相同数量的行。似乎有一种优化,我的意思是如果没有行受到影响,MYSQL不会应用请求的更改。如果这是真的,您知道如何禁用它吗?然后round()使其为0…我不可能禁用此行为。它没有优化-只是没有需要更新的值。这一轮使正确的值不同于0,如果我不按顺序运行这两个查询,但在两次运行之间等待几秒钟,它们将更新相同数量的行。您已经编写了这一轮。如果在两次更新之间等待,sysdate当然不同->PRD_UpdateDate字段必须获取新值。如果直接调用这两个查询,sysdate是相同的。因此,只有在需要更改某些内容时,更新才会起作用。PRD_UpdateDate='2013-12-06 14:00:00',如果我运行更新产品集PRD_UpdateDate='2013-12-06 14:10:00',其中PRD_FlagPC=1;第一次将更新必要的行,第二次更新0行。有没有办法避免这种情况?