为什么affectedRows需要时间来更新

时间:2014-09-18 10:32:50

标签: mysql on-duplicate-key

MySQL documentation声明:

  

如果ON DUPLICATE KEY UPDATE,则每行的受影响行值为1   该行将作为新行插入,如果现有行已更新,则为2。

然而,在使用它时,我得到了不同的结果。对于相同的多个主要唯一密钥,在考虑更新而不是新插入之前需要5或6个更新。 我首先想到它可能是mysql包中的nodejs会被窃听?

然而,我注意到通过mysql shell,我得到了相同类型的错误:

INSERT INTO table SET `master_id` = 119, `slave_id` = 1221829, 
`date` = '2014-09-18', `type` = '42', `threshold` = '18', 
`value` = 18.3536, `ratio` = '1.96'
ON DUPLICATE KEY UPDATE value = (value + VALUES(value)) / 2, 
ratio = (ratio + VALUES(ratio)) / 2;
Query OK, 1 row affected (0.00 sec)

INSERT INTO alerts SET `master_id` = 119, `slave_id` = 1221829, 
`date` = '2014-09-18', `type` = '42', `threshold` = '18', 
`value` = 18.3536, `ratio` = '1.96'
ON DUPLICATE KEY UPDATE value = (value + VALUES(value)) / 2, 
ratio = (ratio + VALUES(ratio)) / 2;
Query OK, 0 rows affected (0.00 sec)

INSERT INTO alerts SET `master_id` = 119, `slave_id` = 1221829, 
`date` = '2014-09-18', `type` = '42', `threshold` = '18', 
`value` = 18.3536, `ratio` = '1.96'
ON DUPLICATE KEY UPDATE value = (value + VALUES(value)) / 2, 
ratio = (ratio + VALUES(ratio)) / 2;
Query OK, 2 rows affected (0.00 sec)

是否因为不建议使用ON DUPLICATE KEY作为多个主键,如下所述?

  

通常,您应该尽量避免使用ON DUPLICATE KEY UPDATE   具有多个唯一索引的表的子句。

或者是因为它是相同的值?或者因为两次插入之间的间隔太短(约10秒)?

我的表有以下主键:{master_id,slave_id,date,type}

我真的不明白......

1 个答案:

答案 0 :(得分:0)

您获得0个受影响的行,因为UPDATE语句不会更改值。

  

对于UPDATE语句,默认情况下受影响的行值为   实际更改的行数。如果指定CLIENT_FOUND_ROWS   当连接到mysqld时,标记为mysql_real_connect()   affected-rows value是“找到”的行数;也就是说,匹配   WHERE子句。