我做的INSERT ... ON DUPLICATE KEY UPDATE
爲下表中PRIMARY KEY
:爲什麼我的'INSERT ... ON DUPLICATE KEY UPDATE'中有2行受到影響?
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
爲什麼你首先有兩個主鍵? – 2010-09-19 20:28:52
@Pekka,'PRIMARY KEY'是在'(uid,iid)'上創建的單個pk,因爲大多數查詢將在兩個值都已知時運行。 – 2010-09-19 20:35:38
@Josh我明白了。但[手冊](http://dev.mysql.com/doc/refman/5.1/en/insert-on-duplicate.html)似乎不鼓勵它:'一般來說,你應該儘量避免使用ON DUPLICATE具有多個唯一索引的表上的KEY UPDATE子句。「它是否需要成爲主鍵?爲什麼不是正常的索引? – 2010-09-19 20:35:44