我做的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