मैं ALTER IGNORE तालिका + एक अद्वितीय कुंजी का उपयोग कर एक MySQL तालिका से डुप्लिकेट को हटाने का प्रयास कर रहा हूं। MySQL दस्तावेज कहता है:MySQL: ALTER IGNORE तालिका "ईमानदारी बाधा उल्लंघन"
आईजीएनओआर मानक एसक्यूएल के लिए एक MySQL एक्सटेंशन है। यह नियंत्रित करता है कि नई तालिका में अद्वितीय कुंजी पर डुप्लीकेट होने पर या सख्त मोड सक्षम होने पर चेतावनियां होने पर वैकल्पिक तालिका कैसे काम करती है। यदि IGNORE निर्दिष्ट नहीं है, तो नकल निरस्त हो जाती है और डुप्लिकेट-कुंजी त्रुटियां होने पर वापस लुढ़का जाता है। यदि IGNORE निर्दिष्ट किया गया है, तो केवल पहली पंक्ति को अद्वितीय कुंजी पर डुप्लिकेट वाले पंक्तियों का उपयोग किया जाता है। अन्य विवादित पंक्तियां हटा दी गई हैं। गलत मूल्य निकटतम मिलान स्वीकार्य मान को छोटा कर दिया जाता है।
जब मैं क्वेरी चलाने ...
ALTER IGNORE TABLE table ADD UNIQUE INDEX dupidx (field)
... मैं अभी भी त्रुटि # 1062 - कुंजी 'dupidx' के लिए प्रविष्टि 'blabla' डुप्लिकेट।
InnoDB बग उस लिंक में सेट सत्र old_alter_table = 1 पहली बार चलाने के लिए 'एक सुझाव दिया समाधान नहीं है,' इस के लिए काम किया! मुझे। – Peter
धन्यवाद पीटर - यह अब मेरे लिए काम कर रहा है। इस समस्या का कोई ख्याल नहीं था - मेरी देव मशीन मारियाडब है लेकिन जब मुझे उत्पादन पर दौड़ना पड़ा (mysql 5.5) इसमें भाग गया। इस stackoverflow मेरा दिन बचाया! – spidie
यह संभवतः सबसे खराब स्वीकार्य उत्तर है जिसे मैंने कभी स्टैक ओवरफ़्लो पर देखा है। स्टोरेज इंजन बदलना मध्यम आकार के टेबल के साथ ही एक महत्वपूर्ण उपक्रम है। ये तीन प्रश्न संभावित रूप से घंटे के लिए डेटाबेस सर्वर को लॉक कर सकते हैं। यह समाधान की तरह कुछ भी नहीं है। – Mikkel