2013-07-24 5 views
20

जोड़ने का प्रयास करते समय मुझे एक अद्वितीय कुंजी जोड़ने का प्रयास करते समय MySQL पर एक त्रुटि मिली है। यहां मैं जो करने की कोशिश कर रहा हूं वह यहां है। मुझे 'unique_id' नामक कॉलम मिला है जो VARCHAR (100) है। तालिका पर परिभाषित कोई अनुक्रमणिका नहीं है। मुझे यह त्रुटि मिल रही है:# 1062 - कुंजी 'unique_id' के लिए डुप्लिकेट एंट्री '' अनन्य कुंजी (MySQL)

#1062 - Duplicate entry '' for key 'unique_id' 

जब मैं एक अद्वितीय कुंजी जोड़ने की कोशिश करता हूं।

ALTER TABLE `wind_archive` ADD `unique_id` VARCHAR(100) NOT NULL FIRST , 
ADD UNIQUE (
`unique_id` 
) 

मैंने पहले भी इस समस्या को मिला है:

enter image description here

यहाँ MySQL क्वेरी जो की phpMyAdmin द्वारा उत्पन्न है: यहाँ मैं इसे कैसे phpMyAdmin में सेट कर रहा हूं अप का एक स्क्रीनशॉट है और इसे कभी हल नहीं किया है इसलिए मैंने टेबल को खरोंच से फिर से बनाया है। दुर्भाग्यवश इस मामले में मैं ऐसा नहीं कर सकता क्योंकि तालिका में पहले से ही कई प्रविष्टियां हैं। आपकी सहायताके लिए धन्यवाद!

उत्तर

28

त्रुटि कहते हैं कि यह सब:

Duplicate entry '' 

तो निम्न क्वेरी चलाएँ:

SELECT unique_id,COUNT(unique_id) 
FROM yourtblname 
GROUP BY unique_id 
HAVING COUNT(unique_id) >1 

इस क्वेरी भी आप समस्या

SELECT * 
FROM yourtblname 
WHERE unique_id='' 

यह आपको जहां दिखाएगा दिखाएगा ऐसे मूल्य हैं जिनमें डुप्लिकेट हैं। आप डुप्लिकेट वाले फ़ील्ड पर एक अद्वितीय इंडेक्स बनाने की कोशिश कर रहे हैं। आपको पहले डुप्लिकेट डेटा को हल करने की आवश्यकता होगी और फिर इंडेक्स जोड़ें।

+0

ओह ठीक है, मुझे अब मिल गया है। हाँ, वास्तव में कारण है कि मैं सूचकांक पर 'अद्वितीय' मूल्य बना रहा हूं। मुझे नहीं पता था कि वास्तव में त्रुटि क्या थी (मैं इसे खत्म कर रहा था)। बहुत बहुत धन्यवाद, जो मुझे सही दिशा में इंगित करता है! – MillerMedia

+0

चूंकि आप पहले से डेटा के साथ आबादी वाले तालिका में एक अनूठा कॉलम जोड़ रहे हैं, इसलिए यह इस त्रुटि को फेंक देगा क्योंकि यह प्रत्येक पंक्ति में '' मान को 'कोशिश और डुप्लिकेट करेगा। यदि आप इस कॉलम को खाली तालिका में जोड़ने और जोड़ने के लिए, तो आपको कोई समस्या नहीं होगी। –

11

यह तीसरी बार है कि मैं इस समस्या का समाधान ढूंढ रहा हूं इसलिए संदर्भ के लिए मैं यहां जवाब पोस्ट कर रहा हूं।

डेटा के आधार पर हम आल्टर कमांड के साथ IGNORE कीवर्ड का उपयोग कर सकते हैं। यदि IGNORE निर्दिष्ट किया गया है, तो केवल पहली पंक्ति को पंक्तियों का उपयोग एक अद्वितीय कुंजी पर डुप्लीकेट के साथ किया जाता है, अन्य विरोधाभासी पंक्तियां हटा दी जाती हैं। गलत मूल्य निकटतम मिलान स्वीकार्य मान को छोटा कर दिया जाता है।

IGNORE MySQL में कीवर्ड एक्सटेंशन को MySQL के कुछ संस्करण पर bug in the InnoDB version लगता है।

तुम हमेशा, MyISAM को परिवर्तित कर सकते हैं, सूचकांक ध्यान न दें-जोड़ने और फिर InnoDB वापस करने के लिए परिवर्तित

ALTER TABLE table ENGINE MyISAM; 
ALTER IGNORE TABLE table ADD UNIQUE INDEX dupidx (field); 
ALTER TABLE table ENGINE InnoDB; 

ध्यान दें, यदि आप विदेशी कुंजी की कमी इस काम नहीं करेगा है, तो आप उन पहले दूर करने के लिए होगा , और बाद में उन्हें वापस जोड़ें।

2

NOT NULL से unique_idNULL करें और यह आपकी समस्या

1
select ID from wind_archive 
where ID not in (select max(ID) from wind_archive group by unique_id) 

का समाधान होगा और यह आप क्या तालिका से निकाल देना चाहिए इससे पहले कि आप सफलतापूर्वक अद्वितीय कुंजी जोड़ना है। यह 2 या अधिक कॉलम के साथ अद्वितीय कुंजी जोड़ने के लिए भी काम करता है। जैसे -

delete from wind_archive 
where ID in (
select * from (select ID from wind_archive where ID not in (
select max(ID) from wind_archive group by lastName, firstName 
) ORDER BY ID 
) AS p 
); 
+0

यह काम किया। क्या आप कृपया बता सकते हैं कि यह कैसे काम करता है। – Durgaprasad

+0

यदि उनकी आईडी के साथ कुछ पंक्तियां हैं तो GROUP BY___ के ग्रुप के MAX (आईडी) के बराबर नहीं है - वे सभी डुप्लिकेशंस हैं; इसके विपरीत, मान लीजिए कि कोई डुप्लिकेशन नहीं है, GROUP BY unique_id के साथ सभी आईडी अपने स्वयं के MAX (आईडी) के बराबर होनी चाहिए, क्योंकि यह स्वयं ही है। –

0

मैं एक ही त्रुटि (unique_id 'कुंजी के लिए' 'डुप्लिकेट प्रविष्टि') हो रही थी जब "के बाद" के रूप में अद्वितीय एक नया स्तंभ जोड़ने की कोशिश कर मैं पहले से ही का सिर्फ नाम शामिल एक मेज बनाया था संग्रहालयों। मैं वापस जाना चाहता था और कोड संग्रहालयों को एक समय में डालने के इरादे से प्रत्येक संग्रहालय नाम के लिए एक अद्वितीय कोड जोड़ना चाहता था। मेरे हिस्से पर खराब टेबल योजना। मेरा समाधान नया कॉलम अद्वितीय बनाने के बिना जोड़ना था; फिर एक समय में प्रत्येक कोड एक पंक्ति के लिए डेटा दर्ज किया; और फिर भविष्य की प्रविष्टियों के लिए इसे अद्वितीय बनाने के लिए कॉलम संरचना को बदलना। भाग्यशाली केवल 10 पंक्तियां थीं।

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