为什么受影响的行数有误?

时间:2016-07-22 17:07:18

标签: php mysql sql pdo

这是我的问题:

SELECT u.password, r.active 
FROM users u
INNER JOIN resend_pass r
ON u.id = r.user_id
WHERE r.token = 'mytoken' AND r.active = 1

上面的查询结果如下:

+----------+--------+
| password | active |
+----------+--------+
| mypass   | 1      |
+----------+--------+

注意: token列是唯一的,因此结果始终为一行(或零行)

现在我将select语句转换为update语句,如下所示:

UPDATE users u
INNER JOIN resend_pass r
ON u.id = r.user_id
SET u.password = 'mynewpass',
    r.active   = 0
WHERE r.token  = 'mytoken' AND
      r.active = 1

然后结果将是这样的:

+-----------+--------+
| password  | active |
+-----------+--------+
| mynewpass | 0      |
+-----------+--------+

好的,一切都很好。只是我不知道为什么受影响的行数是2?如您所见,只有一行,我已经更新了一行的两列,那么为什么行受影响的是2

echo $stm->rowCount(); // 2 

不应该是1吗?

1 个答案:

答案 0 :(得分:7)

SET u.password = 'mynewpass',
    r.active   = 0

每个表中的2行一行别名由u和r。

组成