Estoy haciendo un INSERT ... ON DUPLICATE KEY UPDATE
por a PRIMARY KEY
en la siguiente tabla:
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, aunque estos valores deberían ser únicos, veo 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é está pasando esto?
EDITAR
Para comparar, vea esta 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
mysql
insert
insert-update
Josh Smith
fuente
fuente
PRIMARY KEY
es un solo pk creado en(uid, iid)
ya que la mayoría de las consultas se ejecutarán cuando se conozcan ambos valores.In general, you should try to avoid using an ON DUPLICATE KEY UPDATE clause on tables with multiple unique indexes.
¿Debe ser una clave principal? ¿Por qué no un índice normal?Respuestas:
Del manual :
fuente
… VALUES (2, 2, 'like'), (3, 3, 'like'), (4, 4, 'like') ON DUPLICATE …
Para saber si actualizó una fila (clave duplicada) o simplemente insertó una: http://dev.mysql.com/doc/refman/5.0/en/insert-on-duplicate.html
fuente