Я делаю INSERT ... ON DUPLICATE KEY UPDATE
для PRIMARY KEY
в следующей таблице:
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 | |
+------------+---------------------------------+------+-----+---------+-------+
Однако, хотя эти значения должны быть уникальными, я вижу, что затронуты 2 строки.
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)
Почему это происходит?
РЕДАКТИРОВАТЬ
Для сравнения см. Этот запрос:
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
Джош Смит
источник
источник
PRIMARY KEY
это единственный pk, созданный,(uid, iid)
поскольку большинство запросов будут выполняться, когда известны оба значения.In general, you should try to avoid using an ON DUPLICATE KEY UPDATE clause on tables with multiple unique indexes.
Имеет ли он должен быть первичным ключом? Почему не нормальный индекс?Ответы:
Из руководства :
источник
… VALUES (2, 2, 'like'), (3, 3, 'like'), (4, 4, 'like') ON DUPLICATE …
Итак, вы знаете, обновили ли вы строку (повторяющийся ключ) или просто вставили ее: http://dev.mysql.com/doc/refman/5.0/en/insert-on-duplicate.html
источник