Ich bin ein INSERT ... ON DUPLICATE KEY UPDATE
für ein PRIMARY KEY
in der folgenden Tabelle zu tun:Warum sind 2 Zeilen in meinem `INSERT ... ON DUPLICATE KEY UPDATE 'betroffen?
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 | |
+------------+---------------------------------+------+-----+---------+-------+
Doch obwohl diese Werte eindeutig sein sollten, ich sehe zwei 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 ist das passiert?
EDIT
Zum Vergleich sehen Sie 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
Warum haben Sie in erster Linie zwei Primärschlüssel? –
@Pekka, der 'PRIMARY KEY' ist ein einzelner PK, der auf' (uid, iid) 'erstellt wurde, da die meisten Abfragen ausgeführt werden, wenn beide Werte bekannt sind. –
@Josh ich sehe. Das [Handbuch] (http://dev.mysql.com/doc/refman/5.1/en/insert-on-duplicate.html) scheint es jedoch zu entmutigen: 'Im Allgemeinen sollten Sie versuchen, die Verwendung eines ON DUPLICATE zu vermeiden KEY UPDATE-Klausel für Tabellen mit mehreren eindeutigen Indizes. Muss es ein Primärschlüssel sein? Warum nicht ein normaler Index? –