2013-02-22 31 views
18

MySQL Workbench तालिका बनाने के लिए निम्नलिखित एसक्यूएल के साथ आया था बनाने के लिए पूरी तरह से खुश था।MySQL त्रुटि 1022 जब तालिका बनाने

लेकिन यह एक ...

ERROR 1022 (23000): Can't write; duplicate key in table 'errors_reports' 

मैं के लिए मुझे के जीवन यहां किसी भी डुप्लिकेट चाबी नहीं देख सकता। केवल एक कुंजी परिभाषित है!

मैं एक नया डिफ़ॉल्ट स्थापित के साथ MySQL 5.6 चला रहा हूं। त्रुटि लॉग में कुछ भी नहीं है।

विचार?

संपादित करें:

CONSTRAINT `error_id` 
    FOREIGN KEY (`error_id`) 
    REFERENCES `mydb`.`errors` (`error_id`) 
    ON DELETE NO ACTION 
    ON UPDATE NO ACTION, 

जो के रूप में विशेष रूप से अजीब है: के माध्यम से समाप्त करने की एक प्रक्रिया (तालिका के सरल संभव परिभाषा के लिए वापस जा, फिर धीरे-धीरे बिट्स जोड़ने में वापस) समस्या यह सा प्रतीत होता है कई अन्य टेबल परिभाषाओं में एक समान कोड है और वे बिल्कुल ठीक हैं!

+0

मैं इस प्रश्न के साथ किसी भी समस्या नहीं है .. लगता है कि कुछ और चल रहा हो सकता है –

+0

यह सुनिश्चित नहीं है कि आपको स्पष्ट रूप से एफके कॉलम के लिए एक अनुक्रमणिका बनाना है। मैं इस धारणा के तहत था कि संदर्भ बनाने से एक सूचकांक बन जाएगा। – Kermit

+0

इंडेक्स स्टेटमेंट को खींचने से कोई फर्क नहीं पड़ता है। –

उत्तर

-1

INSERT के बजाय INSERT IGNORE का उपयोग करने का प्रयास करें जहां डुप्लिकेट प्राथमिक कुंजी पाई जाती है तो INSERT IGNORE एक नई पंक्ति नहीं डालेगा। इससे समस्या को अस्थायी हल करने में मदद मिलनी चाहिए, लेकिन मैं तालिका को छोटा करने की सिफारिश करता हूं।

+0

यह डेटा डालने, तालिका बना रहा है। यहां कोई INSERT नहीं जा रहा है। –

+0

दाएं।यह निश्चित रूप से विदेशी कुंजी मुद्दा (मेरे लिए त्रुटि 105)। सुनिश्चित करें कि विदेशी कुंजी और संदर्भित कॉलम में समान डेटा प्रकार हैं जैसे कि संयोजन, डिफ़ॉल्ट विशेषताएँ आदि। –

2

ऐसा लगता है कि आप विदेशी कुंजी कॉलम पर एक अनुक्रमणिका बना रहे हैं। InnoDb में एक विदेशी कुंजी बनाते समय, एक स्वचालित रूप से बनाया जाएगा।

See this thread

+0

कोड MySQL वर्कबेंच द्वारा उत्पादित किया गया था, जो स्पष्ट रूप से इसे जोड़ता प्रतीत होता है। ऐसा नहीं है कि इससे कोई फर्क पड़ता है। –

+0

@MattMcLeod क्या आप तालिका के निर्माण के बाद बाधाएं पैदा करने में सक्षम हैं? क्या आप तालिका बनाने से पहले/बाद में [इंडेक्स की जांच कर सकते हैं] (http://stackoverflow.com/a/5213364/679449) भी कोशिश कर सकते हैं? – Kermit

+1

आह! यह मुझे लगता है कि मुझे लगता है कि समाधान क्या है: एक और तालिका में पहले से ही एक ही बाधा लागू हुई थी: error_id, और वर्कबेंच ने उन दोनों को एक ही बाधा नाम दिया। बाधा नाम बदलने से इसे बनाया जा सकता है। –

59

समस्या यह है कि नाम एक विदेशी कुंजी नहीं किया जा सकता की ही रूप एक और विदेशी कुंजी पूरे मॉडल में। > प्रदायक

उत्पाद - -

इस स्थिति

सूचि कल्पना कीजिए> प्रदायक

यदि आपूर्तिकर्ता के लिए तालिका सूची में विदेशी कुंजी का नाम "आपूर्तिकर्ता" है और आप एक ही सौंपा उत्पाद तालिका में नाम तो विदेशी कुंजी नाम "टकराएंगे"।

आप उन्हें अलग ढंग से नाम के लिए की जरूरत है ..

उदाहरण के लिए:

catalog_supplier product_supplier

+0

धन्यवाद! एक ही समस्या थी और यह समझ में नहीं आया कि त्रुटि मालिश दी गई है। बीटीडब्ल्यू टकराव विदेशी कुंजी का नाम स्तंभ नाम के समान नहीं है, केवल कुंजी के लिए एक आंतरिक MySQL नाम है। – uzilan

+2

यह जवाब है! महान! –

+1

क्या आप जानते हैं कि MySQL में यह बाधा क्यों मौजूद है? – vipw