Robię INSERT ... ON DUPLICATE KEY UPDATE
za a PRIMARY KEY
w poniższej tabeli:
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 | |
+------------+---------------------------------+------+-----+---------+-------+
Jednak mimo że te wartości powinny być unikalne, widzę zmiany w 2 wierszach.
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)
Dlaczego to się dzieje?
EDYTOWAĆ
Dla porównania zobacz to zapytanie:
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
źródło
źródło
PRIMARY KEY
to pojedynczy pakiet utworzony w dniu,(uid, iid)
ponieważ większość zapytań zostanie uruchomionych, gdy znane są obie wartości.In general, you should try to avoid using an ON DUPLICATE KEY UPDATE clause on tables with multiple unique indexes.
Czy trzeba być klucz podstawowy? Dlaczego nie normalny indeks?Odpowiedzi:
Z instrukcji :
źródło
… VALUES (2, 2, 'like'), (3, 3, 'like'), (4, 4, 'like') ON DUPLICATE …
Więc wiesz, czy zaktualizowałeś wiersz (zduplikowany klucz), czy po prostu wstawiłeś jeden: http://dev.mysql.com/doc/refman/5.0/en/insert-on-duplicate.html
źródło