Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

डुप्लीकेट कुंजी + ऑटो वृद्धि जारी करने पर mysql

यह व्यवहार दस्तावेज है (कोष्ठक में पैराग्राफ):

<ब्लॉकक्वॉट>

यदि आप ON DUPLICATE KEY UPDATE को निर्दिष्ट करते हैं, और एक पंक्ति डाली जाती है जो UNIQUE अनुक्रमणिका या प्राथमिक कुंजी में डुप्लिकेट मान का कारण बनेगी, तो MySQL पुरानी पंक्ति का अद्यतन करता है। उदाहरण के लिए, यदि कॉलम a को अद्वितीय घोषित किया गया है और इसमें मान 1 है, तो निम्नलिखित दो कथनों का समान प्रभाव पड़ता है:

    INSERT INTO table (a,b,c) VALUES (1,2,3)   ON DUPLICATE KEY UPDATE c=c+1;

    UPDATE table SET c=c+1 WHERE a=1;

(प्रभाव इनो डीबी तालिका के लिए समान नहीं हैं जहां ए एक ऑटो-इंक्रीमेंट कॉलम है। ऑटो-इंक्रीमेंट कॉलम के साथ, एक INSERT स्टेटमेंट ऑटो-इंक्रीमेंट वैल्यू को बढ़ाता है लेकिन UPDATE नहीं करता है।)

यहाँ एक सरल व्याख्या है। MySQL पहले डालने का प्रयास करता है। यह तब होता है जब आईडी स्वतः बढ़ जाती है। एक बार बढ़ने के बाद, यह रहता है। फिर डुप्लिकेट का पता लगाया जाता है और अपडेट होता है। लेकिन मान छूट जाता है।

आपको auto_increment . पर निर्भर नहीं रहना चाहिए कोई अंतराल नहीं होना। यदि यह एक आवश्यकता है, तो अपडेट और इंसर्ट पर ओवरहेड बहुत बड़ा है। अनिवार्य रूप से, आपको पूरी मेज पर एक ताला लगाने की जरूरत है, और उन सभी चीजों को फिर से क्रमांकित करने की आवश्यकता है, जिन्हें आमतौर पर एक ट्रिगर का उपयोग करके पुन:क्रमांकित करने की आवश्यकता होती है। आउटपुट पर वृद्धिशील मानों की गणना करना एक बेहतर उपाय है।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. एसक्यूएल क्या है? एक डेटाबेस क्या है? रिलेशनल डेटाबेस मैनेजमेंट सिस्टम्स (RDBMS) को प्लेन इंग्लिश में समझाया गया।

  2. क्या mysql 5.6 के लिए कोई_VALUE क्षमता है?

  3. MySQL कॉन्फ़िगरेशन चर सेट करना - MySQL 5.7 बनाम MySQL 8.0

  4. SQL स्प्लिट कॉमा सेपरेटेड रो

  5. MySQL में दो तिथियों के बीच अंतर की गणना कैसे करें