त्रुटि कोड:1005 -- आपके कोड में गलत प्राथमिक कुंजी संदर्भ है
आमतौर पर यह एक संदर्भित विदेशी कुंजी फ़ील्ड के कारण होता है जो मौजूद नहीं होता है। हो सकता है कि आपसे कोई टाइपो गलती हो, या मामले की जांच करें कि यह समान होना चाहिए, या कोई फ़ील्ड-प्रकार बेमेल है। विदेशी कुंजी-लिंक्ड फ़ील्ड सटीक रूप से परिभाषाओं से मेल खाना चाहिए।
कुछ ज्ञात कारण हो सकते हैं:
- दो प्रमुख फ़ील्ड प्रकार और/या आकार बिल्कुल मेल नहीं खाते। उदाहरण के लिए, यदि कोई है
INT(10)मुख्य फ़ील्डINT(10)होना चाहिए साथ ही और नहींINT(11)याTINYINT. आपSHOW. का उपयोग करके फ़ील्ड आकार की पुष्टि करना चाह सकते हैंCREATETABLEक्योंकि क्वेरी ब्राउज़र कभी-कभी केवलINTEGER. को नेत्रहीन रूप से दिखाएगा दोनों के लिएINT(10)औरINT(11). आपको यह भी जांचना चाहिए कि कहीं कोईSIGNEDतो नहीं है और दूसरा हैUNSIGNED. वे दोनों बिल्कुल एक जैसे होने चाहिए। - जिस प्रमुख फ़ील्ड को आप संदर्भित करने का प्रयास कर रहे हैं उनमें से एक में अनुक्रमणिका नहीं है और/या प्राथमिक कुंजी नहीं है। यदि संबंध में कोई एक फ़ील्ड प्राथमिक कुंजी नहीं है, तो आपको उस फ़ील्ड के लिए एक अनुक्रमणिका बनानी होगी।
- विदेशी कुंजी नाम पहले से मौजूद कुंजी का डुप्लिकेट है। जांचें कि आपके डेटाबेस में आपकी विदेशी कुंजी का नाम अद्वितीय है। इसका परीक्षण करने के लिए अपने कुंजी नाम के अंत में बस कुछ यादृच्छिक वर्ण जोड़ें।
- आपकी एक या दोनों टेबल एक
MyISAMहै टेबल। विदेशी कुंजियों का उपयोग करने के लिए, टेबल दोनोंInnoDB. होने चाहिए . (वास्तव में, यदि दोनों टेबलMyISAM. हैं तब आपको एक त्रुटि संदेश नहीं मिलेगा - यह सिर्फ कुंजी नहीं बनाएगा।) क्वेरी ब्राउज़र में, आप तालिका प्रकार निर्दिष्ट कर सकते हैं। - आपने एक कैस्केड निर्दिष्ट किया है
ONDELETESETNULL, लेकिन प्रासंगिक कुंजी फ़ील्डNOT. पर सेट हैNULL. आप अपने कैस्केड को बदलकर याNULL. को अनुमति देने के लिए फ़ील्ड सेट करके इसे ठीक कर सकते हैं मान। - सुनिश्चित करें कि चारसेट और कोलेट विकल्प तालिका स्तर के साथ-साथ कुंजी कॉलम के लिए अलग-अलग फ़ील्ड स्तर पर समान हैं।
- आपके पास अपने विदेशी कुंजी कॉलम पर एक डिफ़ॉल्ट मान (अर्थात, डिफ़ॉल्ट =0) है
- संबंध में फ़ील्ड में से एक संयोजन (समग्र) कुंजी का हिस्सा है और इसकी अपनी व्यक्तिगत अनुक्रमणिका नहीं है। भले ही मिश्रित कुंजी के हिस्से के रूप में फ़ील्ड में एक अनुक्रमणिका है, आपको केवल उस कुंजी फ़ील्ड के लिए एक अलग अनुक्रमणिका बनानी होगी ताकि इसे एक बाधा में उपयोग किया जा सके।
- आपके
ALTER. में सिंटैक्स त्रुटि है कथन या आपने संबंध में फ़ील्ड नामों में से किसी एक को गलत टाइप किया है - आपकी विदेशी कुंजी का नाम 64 वर्णों की अधिकतम लंबाई से अधिक है।
अधिक विवरण के लिए, देखें:MySQL त्रुटि संख्या 1005 तालिका नहीं बना सकता