2010-08-08 11 views
5

निम्न तालिका पर विचार करें:डुप्लिकेट एक अलग अद्वितीय कॉलम है जब मैं ऑन डिप्लिकेट कुंजी अद्यतन का उपयोग करते समय प्राथमिक कुंजी को स्वचालित रूप से बढ़ाने से MySQL को कैसे रोकूं?

+-------------+------------------+------+-----+---------+----------------+ 
| Field  | Type    | Null | Key | Default | Extra   | 
+-------------+------------------+------+-----+---------+----------------+ 
| vendor_id | int(10) unsigned | NO | PRI | NULL | auto_increment | 
| vendor_name | varchar(100)  | NO | UNI | NULL |    | 
| count  | int(10) unsigned | NO |  | 1  |    | 
+-------------+------------------+------+-----+---------+----------------+ 

मैं निम्नलिखित MySQL क्वेरी है:

INSERT INTO `table` 
    (`vendor_name`) 
VALUES 
    ('foobar') ON DUPLICATE KEY UPDATE `count` = `count` + 1 

इस क्वेरी के इरादे को मेज पर और मामले में विक्रेता का नाम पहले से ही एक नया विक्रेता का नाम डालने के लिए है मौजूद है, कॉलम गिनती 1 तक बढ़ाई जानी चाहिए। यह काम करता है हालांकि वर्तमान कॉलम की प्राथमिक कुंजी भी स्वतः बढ़ी जाएगी। मैं इन मामलों में प्राथमिक कुंजी को स्वतः बढ़ाने के लिए MySQL को कैसे रोक सकता हूं? क्या एक प्रश्न के साथ ऐसा करने का कोई तरीका है?

धन्यवाद।

+0

क्या आप किसी भी लाँगुएज (जैसे PHP) का उपयोग करते हैं? प्रक्रिया को लागू करने के लिए? – srinivas

+0

हां, मैं डेटा को कहीं और लाने के लिए PHP का उपयोग करता हूं और इस क्वेरी के साथ अपनी तालिका में इसे सम्मिलित करता हूं। – vascaino

उत्तर

1

यह काम करता है हालांकि वर्तमान कॉलम की प्राथमिक कुंजी भी ऑटो-वृद्धि होगी। मैं इन मामलों में प्राथमिक कुंजी को स्वतः बढ़ाने के लिए MySQL को कैसे रोक सकता हूं?

एक अद्यतन कथन का उपयोग जब मूल्य पहले से मौजूद है द्वारा:

IF EXISTS(SELECT NULL 
      FROM TABLE 
      WHERE vendor_name = $vendor_name) THEN 

    UPDATE TABLE 
     SET count = count + 1 
    WHERE vendor_name = $vendor_name 

ELSE 

    INSERT INTO TABLE 
     (vendor_name) 
    VALUES 
     ($vendor_name 

END IF 

मैं पर नकली चाबी अद्यतन करने के लिए वैकल्पिक करने की कोशिश की, जांच बदलें:

REPLACE INTO vendors SET vendor_name = 'foobar', COUNT = COUNT + 1 

यह गिनती अद्यतन करता है, और vendor_id तो यह बदतर है ...

डेटाबेस & डेटा परवाह नहीं है यदि संख्याएं नहीं हैं अनुक्रमिक, केवल मूल्य ही अद्वितीय हैं। यदि आप इसके साथ रह सकते हैं, तो मैं ऑन डिप्लिकेट अपडेट सिंटैक्स का उपयोग करता हूं हालांकि मैं मानता हूं कि व्यवहार अजीब है (एक INSERT कथन का उपयोग करने पर विचार करने योग्य समझने योग्य)।

1

मुझे लगता है कि यह ऐसा कर सकता है। लेकिन यह दाओवाद के सिद्धांतों के खिलाफ बहुत अधिक है - आप वास्तव में अनाज के खिलाफ जा रहे हैं।

शायद एक बेहतर समाधान है।

INSERT INTO `table` 
    (`vendor_name`) 
VALUES 
    ('foobar') ON DUPLICATE KEY UPDATE `count` = `count` + 1, `vendor_id`=`vendor_id`-1 
संबंधित मुद्दे