estoy haciendo un INSERT ... ON DUPLICATE KEY UPDATE
para un PRIMARY KEY
en la siguiente tabla:¿Por qué se ven afectadas 2 filas en mi `INSERTAR ... EN ACTUALIZACIÓN DE LLAVE DUPLICADA '?
DESCRIBE users_interests;
+------------+---------------------------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+------------+---------------------------------+------+-----+---------+-------+
| uid | int(11) | NO | PRI | NULL | |
| iid | int(11) | NO | PRI | NULL | |
| preference | enum('like','dislike','ignore') | YES | | NULL | |
+------------+---------------------------------+------+-----+---------+-------+
Sin embargo, a pesar de que estos valores deben ser únicos, estoy viendo 2 filas afectadas.
INSERT INTO users_interests (uid, iid, preference) VALUES (2, 2, 'like')
ON DUPLICATE KEY UPDATE preference='like';
Query OK, 2 rows affected (0.04 sec)
Por qué sucede esto?
EDITAR
Para la comparación, véase la siguiente consulta:
UPDATE users_interests SET preference='like' WHERE uid=2 AND iid=2;
Query OK, 1 row affected (0.44 sec)
Rows matched: 1 Changed: 1 Warnings: 0
¿Por qué tiene dos llaves principales en primer lugar? –
@Pekka, la 'PRIMARY KEY' es un único pk creado en' (uid, iid) 'ya que la mayoría de las consultas se ejecutarán cuando se conozcan ambos valores. –
@Josh veo. El [manual] (http://dev.mysql.com/doc/refman/5.1/en/insert-on-duplicate.html) parece desalentarlo: 'En general, debe intentar evitar el uso de un ON DUPLICATE CLAVE DE ACTUALIZACIÓN DE TECLAS en tablas con múltiples índices únicos. ¿Tiene que ser una clave principal? ¿Por qué no un índice normal? –