MySQL为什么这些查询的顺序会改变结果?

时间:2017-07-16 17:56:43

标签: php mysql mysqli

我有两个MySQL表,一个带有DateTaken,另一个带有LastReviewed,两者都存储过去的值的日期时间。两个表都有一个UserID列(不是索引唯一的)我有一些查询,这些查询旨在向前移动绑定到特定用户的所有日期,以便最大值现在正确。这些是我的疑问:

// Step 1: calculate and store the offset
SELECT @offset := DATEDIFF(
   CURDATE(),
   (SELECT MAX(r.LastReviewed) 
    FROM `results` r WHERE r.`UserID`= 123     
)

// step 2: shift dates in drills table by the offset
UPDATE `drills` d
SET d.`DateTaken` = d.`DateTaken` + INTERVAL @offset DAY
WHERE d.`UserID`=123

// step 3: shift dates in results table by the offset
UPDATE `results` 
   SET LastReviewed = LastReviewed + INTERVAL @offset DAY
 WHERE UserID = 123

我使用PHP的mysqli::multi_query运行这些查询。类似的东西:

$mysqli = new mysqli("localhost", "my_user", "my_password", "world");
$mysqli->multi_query("$step1; $step2; $step3");

发生了奇怪的事情,但我无法弄明白为什么。如果我按照上面的顺序运行查询,则两个表都会正确更新。但是,如果我改变第2步和第3步:

$mysqli->multi_query("$step1; $step3; $step2");

然后drills表(来自第2步)确实更新,但results表(来自第3步)确实更新了。那为什么会这样?由于步骤2和3是独立的,因此对我来说似乎不合逻辑。

0 个答案:

没有答案