tôi đang làm một INSERT ... ON DUPLICATE KEY UPDATE
cho một PRIMARY KEY
trong bảng sau:Tại sao 2 hàng bị ảnh hưởng trong `INSERT ... ON UPDATE DUPLICATE KEY UPDATE`?
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 | |
+------------+---------------------------------+------+-----+---------+-------+
Tuy nhiên, mặc dù các giá trị phải là duy nhất, tôi nhìn thấy 2 hàng bị ảnh hưởng.
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)
Tại sao điều này xảy ra?
EDIT
Để so sánh, xem truy vấn này:
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
Tại sao bạn có hai khóa chính ở vị trí đầu tiên? –
@Pekka, 'PRIMARY KEY' là một pk được tạo trên '(uid, iid)' vì hầu hết các truy vấn sẽ được chạy khi cả hai giá trị được biết. –
@Josh tôi hiểu rồi. [Thủ công] (http://dev.mysql.com/doc/refman/5.1/en/insert-on-duplicate.html) dường như không khuyến khích nó mặc dù: 'Nói chung, bạn nên cố gắng tránh sử dụng một ON DUPLICATE Mệnh đề KEY UPDATE trên các bảng có nhiều chỉ mục duy nhất.' Có cần phải là khóa chính không? Tại sao không phải là một chỉ số bình thường? –