2010-05-28 16 views
9

में की जगह मैं वर्तमान में एक बयान में की जगह उपयोग कर रहा हूँ, मैं एक अद्वितीय क्षेत्र है जो यह बजाय तो इसे अपडेट डुप्लिकेट पाता INSERT का कारण होगा है ...mysql विकल्प

समस्या है अगर यह एक नकली पाता है मैं कुछ कॉलम पर अपडेट नहीं कर सकता, यह सिर्फ बहुत मिटा देता है।

क्या कोई समान "एक कथन" विधि है जहां मैं बस जो चाहता हूं उसे अपडेट कर सकता हूं?

मैंने पाया में विलय लेकिन undertsnad नहीं है पहली बिट के बारे में मेज

का उपयोग कर

उत्तर

16

आप सम्मिलित का उपयोग करना चाहते करने जा रहे हैं ... पर नकली चाबी अद्यतन वाक्य रचना तालिका में विलय।

http://dev.mysql.com/doc/refman/5.1/en/insert-on-duplicate.html

यहाँ एक उदाहरण है कि एक आईडी, जन्मदिन, और नाम के साथ एक रिकॉर्ड बनाने की कोशिश करेंगे है। यदि आईडी फ़ील्ड के साथ एक रिकॉर्ड मौजूद है, तो यह निर्दिष्ट अद्यतन करेगा। तालिका में ईमेल पते, ज़िप कोड इत्यादि जैसे कई अन्य फ़ील्ड हैं। यदि मैं अपडेट करता हूं तो मैं उन क्षेत्रों को अकेले छोड़ना चाहता हूं। (अगर मैं इसे संदर्भ में संदर्भ में शामिल नहीं करता हूं तो उस डेटा में से कोई भी खोना होगा।)

INSERT INTO user (userid,birthday,first_name,last_name) 
    VALUES (1234,'1980-03-07','Joe','Smith') 
ON DUPLICATE KEY UPDATE 
    birthday = '1980-03-07', 
    first_name = 'Joe', 
    last_name = 'Smith'; 
+0

बढ़िया! इस तरह यह प्राथमिक कुंजी रखता है ... – 472084

+0

हाँ, नुकसान हालांकि यह बहुत अधिक लेखन लेता है। – Anonymous

+1

INSERT का उपयोग करने से संभावित रूप से एक बहुत ही भारी प्रदर्शन लाभ भी है ... डिप्लिकेट कुंजी अपडेट पर: http://code.openark.org/blog/mysql/replace-into-think-twice। मैं कहूंगा कि कोड लेखन के एक अतिरिक्त मिनट के लायक है ... –

संबंधित मुद्दे