Ich mache eine INSERT ... ON DUPLICATE KEY UPDATE
für eine PRIMARY KEY
in der folgenden Tabelle:
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 | |
+------------+---------------------------------+------+-----+---------+-------+
Obwohl diese Werte eindeutig sein sollten, sind 2 Zeilen betroffen.
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)
Warum passiert dies?
BEARBEITEN
Zum Vergleich siehe diese Abfrage:
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
quelle
quelle
PRIMARY KEY
ist ein einzelnes Paket, das erstellt wurde,(uid, iid)
da die meisten Abfragen ausgeführt werden, wenn beide Werte bekannt sind.In general, you should try to avoid using an ON DUPLICATE KEY UPDATE clause on tables with multiple unique indexes.
Muss es ein Primärschlüssel sein? Warum nicht ein normaler Index?Antworten:
Aus dem Handbuch :
quelle
… VALUES (2, 2, 'like'), (3, 3, 'like'), (4, 4, 'like') ON DUPLICATE …
Sie wissen also, ob Sie eine Zeile (doppelter Schlüssel) aktualisiert oder nur eine eingefügt haben: http://dev.mysql.com/doc/refman/5.0/en/insert-on-duplicate.html
quelle