मेरे पास MySQL संस्करण 5.1 में एक तालिका बनाने के लिए निम्न स्क्रिप्ट है जो 3 अन्य तालिकाओं को संदर्भित करने के लिए है। इन 3 डी टेबल इनो डीबी का उपयोग करके बनाए गए हैं, और सभी 3 टेबलों में आईआईटी के रूप में परिभाषित आईडी कॉलम है।विदेशी कुंजी और MySQL त्रुटियां
मैंने अन्य तालिकाओं को सफलतापूर्वक बनाया है जो ACCOUNT और PERSON का संदर्भ देते हैं, हालांकि, यह पहली तालिका है जो ADDRESS का संदर्भ देती है, इसलिए मैंने उस तालिका के लिए परिभाषा भी शामिल की है, जैसा कि नीचे भी चलाया गया है।
जो त्रुटि मुझे मिल रही है वह त्रुटि 150 के साथ ERROR 1005 (HY000) है, जिसे मैं विदेशी कुंजी निर्माण से संबंधित समझता हूं।
स्क्रिप्ट जो विफल रहता है (अतिरिक्त सादगी के लिए हटा दिया कॉलम) है:
CREATE TABLE WORK_ORDER (
ID INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
ACCOUNT_ID INT NOT NULL,
CUSTOMER_ID INT NOT NULL,
SALES_ID INT,
TRADES_ID INT,
LOCATION_ID INT NOT NULL,
INDEX CUST_INDEX(CUSTOMER_ID),
INDEX SALES_INDEX(SALES_ID),
INDEX TRADES_INDEX(TRADES_ID),
INDEX ACCOUNT_INDEX(ACCOUNT_ID),
INDEX LOCATION_INDEX(LOCATION_ID),
FOREIGN KEY (CUSTOMER_ID) REFERENCES PERSON(ID) ON DELETE CASCADE,
FOREIGN KEY (SALES_ID) REFERENCES PERSON(ID) ON DELETE SET NULL,
FOREIGN KEY (TRADES_ID) REFERENCES PERSON(ID) ON DELETE SET NULL,
FOREIGN KEY (ACCOUNT_ID) REFERENCES ACCOUNT(ID) ON DELETE CASCADE,
FOREIGN KEY (LOCATION_ID) REFERENCES ADDRESS(ID) ON DELETE SET NULL
) ENGINE=InnoDB;
SQL विवरण ADDRESS तालिका बनाने के लिए प्रयोग किया जाता है (अतिरिक्त कॉलम सादगी के लिए निकाला गया) से कम है।
CREATE TABLE ADDRESS (
ID INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
PERSON_ID INT NOT NULL,
ACCOUNT_ID INT NOT NULL,
ADDRESS_L1 VARCHAR(50),
ADDRESS_L2 VARCHAR(50),
CITY VARCHAR(25),
PROVINCE VARCHAR(20),
POSTAL_CODE VARCHAR(6),
COUNTRY VARCHAR(25),
INDEX CUST_INDEX(PERSON_ID),
INDEX ACCOUNT_INDEX(ACCOUNT_ID),
FOREIGN KEY (ACCOUNT_ID) REFERENCES ACCOUNT(ID) ON DELETE CASCADE,
FOREIGN KEY (PERSON_ID) REFERENCES PERSON(ID) ON DELETE CASCADE
) ENGINE=InnoDB;
मैं कई सवाल यहां इसी तरह के मुद्दों के साथ काम कर के माध्यम से ब्राउज़ कर चुके हैं, लेकिन सबसे डुप्लिकेट परिभाषाएँ और मेल नहीं फ़ील्ड प्रकार, साथ ही एक के लिए कुछ InnoDB का उपयोग नहीं कर या तालिकाओं के अन्य होने लगते हैं। हालांकि, इनमें से कोई भी समस्या नहीं प्रतीत होता है। कोई विचार?
LOCATION_ID कुंजी पर आपका हटाएं क्रिया काफी सही नहीं लगता है: उत्पादन में दफन एक "नवीनतम विदेशी कुंजी त्रुटि" अनुभाग में, जिस पर वास्तव में क्या '150' त्रुटि के कारण अधिक विवरण होगा किया जाएगा चूंकि LOCATION_ID को न्यूल के रूप में परिभाषित किया गया है। मैंने नहीं सोचा था कि MySQL ने बाधा निर्माण के दौरान यह जांच की है, हालांकि ... – grossvogel
धन्यवाद, यह काम किया! इसे एक उत्तर के रूप में पोस्ट करें, और मैं इसे सही चिह्नित करूंगा। – Elie