Estou fazendo um INSERT ... ON DUPLICATE KEY UPDATE
for a PRIMARY KEY
na seguinte tabela:
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 | |
+------------+---------------------------------+------+-----+---------+-------+
No entanto, embora esses valores devam ser exclusivos, estou vendo 2 linhas afetadas.
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 que isso está acontecendo?
EDITAR
Para comparação, consulte 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
fonte
fonte
PRIMARY KEY
é um único pk criado em(uid, iid)
uma vez que a maioria das consultas será executada quando ambos os valores forem conhecidos.In general, you should try to avoid using an ON DUPLICATE KEY UPDATE clause on tables with multiple unique indexes.
ela precisa ser uma chave primária? Por que não um índice normal?Respostas:
Do manual :
fonte
… VALUES (2, 2, 'like'), (3, 3, 'like'), (4, 4, 'like') ON DUPLICATE …
Assim, você sabe se atualizou uma linha (chave duplicada) ou apenas inseriu uma: http://dev.mysql.com/doc/refman/5.0/en/insert-on-duplicate.html
fonte