2009-10-19 19 views
5

के लिए दो कॉलम पर एक अद्वितीय सूचकांक बनाएं मेरे पास 4 कॉलम वाली एक तालिका है। मैं निर्माण पर मूल्य कॉलम को INSERT या अद्यतन करने में सक्षम होना चाहता हूं (मुझे इंडेक्स पंक्ति आईडी की परवाह नहीं है)।MySQL - ऑन डिप्लिकेट कुंजी

CREAT TABLE tablename (
id, (primary) 
user_id, (index) 
setting_id, (index) 
value (index) 
); 

मूल रूप से मैं प्रत्येक बार एक मूल्य बचाने के लिए "प्रतिस्थापन ..." क्वेरी चलाने जा रहा था। लेकिन फिर मैं read about the problems और इसके बजाय एक अद्यतन दर्ज किया ... डिप्लिकेट कुंजी अद्यतन पर।

समस्या यह है कि मेरे पास "INSERT INTO ... डिप्लिकेट कुंजी अपडेट" के लिए एकल कॉलम नहीं है, यह पता लगाने के लिए कि यह एक नई पंक्ति है या यदि कोई मौजूदा पंक्ति है जो होने की आवश्यकता है अपडेट किया गया।

तो मैं सोचा कि मैं एक अद्वितीय कुंजी है कि दो कॉलम इस पंक्ति को अद्वितीय (

CREATE UNIQUE INDEX index_name ON table(user_id, setting_id); 

बनाया हालांकि, मुझे यकीन है कि यहाँ से अग्रिम करने के लिए कैसे। कैसे कर नहीं कर रहा हूँ का मिश्रण था का प्रयोग करेंगे मैं इस नए सूचकांक जब यह पता लगाने की एक पंक्ति को पहले से ही इन दोनों स्तंभ मान के साथ मौजूद है की कोशिश कर जांच करने के लिए मेरे प्रश्नों की संरचना

INSERT INTO `tablename` (value, user_id, setting_id) VALUES (1,34,15) ON DUPLICATE KEY UPDATE 

: संपादित करें:

आईडी प्राथमिक स्तंभ ली को हटाकर केवल ving (setting_id, user_id, & मान) मैं (प्राथमिक_आईडी, user_id) पर एक प्राथमिक अनुक्रमणिका बनाने में सक्षम था और फिर निम्न क्वेरी काम करती थी। more help here

INSERT INTO tablename (user_id, setting_id, value) 
VALUES (42, 1, 12) 
ON DUPLICATE KEY UPDATE value = 12 

उत्तर

8

क्वेरी आप कुछ इस तरह लग रही हो जाएंगे ...

INSERT INTO table (value,user_id,setting_id) VALUES (1,34,15) 
    ON DUPLICATE KEY UPDATE value = 1, user_id = 34, setting_id = 15; 
संबंधित मुद्दे