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,日期,类型}

我真的不明白...

最佳答案

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


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

关于mysql - 为什么会受影响行需要时间来更新,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25910287/

10-11 12:53