मैं निम्न तालिका में एक PRIMARY KEY
के लिए एक INSERT ... ON DUPLICATE KEY UPDATE
कर रहा हूँ:मेरे 'INSERT ... पर लागू होने वाली कुंजी अपडेट पर 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
आपके पास पहली जगह दो प्राथमिक कुंजी क्यों हैं? –
@ पेक्का, 'प्राथमिक कुंजी' '(uid, iid) 'पर बनाई गई एक एकल पीके है क्योंकि अधिकांश मान चलेंगे जब दोनों मान ज्ञात होंगे। –
@ जोश मैं देखता हूं। [मैनुअल] (http://dev.mysql.com/doc/refman/5.1/en/insert-on-duplicate.html) इसे हतोत्साहित करता है हालांकि: 'सामान्य रूप से, आपको एक ऑन डिप्लिकेट का उपयोग करने से बचने की कोशिश करनी चाहिए एकाधिक अद्वितीय अनुक्रमणिका वाले तालिकाओं पर कुंजी अद्यतन खंड। 'क्या इसे प्राथमिक कुंजी होने की आवश्यकता है? एक सामान्य सूचकांक क्यों नहीं? –