2014-09-18 6 views
0

MySQL documentation états:Pourquoi affectedRows prend du temps de mettre à jour

With ON DUPLICATE KEY UPDATE, the affected-rows value per row is 1 if the row is inserted as a new row and 2 if an existing row is updated.

Cependant, pendant l'utilisation, je reçois un résultat différent. Pour une même clé unique primaire multiple, il faut 5 ou 6 mises à jour avant de considérer comme une mise à jour et non une nouvelle insertion. J'ai d'abord pensé qu'il pourrait être nodejs avec le paquet mysql qui serait buggé?

Cependant, je remarque que par le shell mysql, je reçois le même type d'erreur:

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) 

Est-ce parce qu'il est conseillé de ne pas utiliser sur clé dupliqués pour un multiple de clé primaire comme indiqué ci-dessous?

In general, you should try to avoid using an ON DUPLICATE KEY UPDATE clause on tables with multiple unique indexes.

Ou est-ce parce que ce sont les valeurs sames? Ou parce que l'intervalle entre deux insertions est trop court (~ 10 secondes)?

Ma table a la clé primaire suivante: {master_id, slave_id, date, type}

Je ne comprends pas ...

Répondre

0

Vous obtenez 0 lignes affectées, parce que l'instruction UPDATE ne changer une valeur.

For UPDATE statements, the affected-rows value by default is the number of rows actually changed. If you specify the CLIENT_FOUND_ROWS flag to mysql_real_connect() when connecting to mysqld, the affected-rows value is the number of rows “found”; that is, matched by the WHERE clause.

Questions connexes