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/