2013-05-31 2 views
7

मैं MySQL errno 150 प्राप्त जब, एक विदेशी कुंजी copnstraint जोड़ने की कोशिश कर तथापि मैं एक समाधान अभी तक नहीं मिला है के बारे में कई अन्य पदों पढ़ा है। मुझे आशा है कि मैं कुछ बेवकूफ नहीं कर रहा हूं। मैंने एक साधारण परीक्षण केस बनाया।विदेशी कुंजी जोड़ना MySQL (errno 150) में विफल

  1. दोनों टेबल InnoDB हैं।
  2. दोनों टेबल यूटीएफ -8 हैं।
  3. दोनों कॉलम int (11) हस्ताक्षरित हैं (color_id NOT NULL बनाना कोई फर्क नहीं पड़ता)। (संपादित करें: मैं इस बारे में गलत था, और इस था समाधान)

    यहाँ मेरी दो तालिकाओं हैं:

टेबल widgets:

CREATE TABLE `widgets` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT, 
`name` varchar(100) NOT NULL DEFAULT '', 
`color_id` int(11) DEFAULT NULL, 
PRIMARY KEY (`id`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8; 

टेबल colors:

CREATE TABLE `colors` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT, 
`name` varchar(10) NOT NULL DEFAULT '', 
PRIMARY KEY (`id`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8; 

मैं बस इन टेबलों को बनाया, कोई सामग्री नहीं है। जब मैं colors.id को widgets.color_id जोड़ने के लिए एक विदेशी कुंजी बाधा जोड़ने की कोशिश, ऐसा होता है:

mysql> ALTER TABLE `widgets` ADD FOREIGN KEY (`color_id`) REFERENCES `color` (`id`); 

ERROR 1005 (HY000): Can't create table 'production.#sql-7b1_2dd7' (errno: 150) 

मैं बस जोड़ देंगे कि मैं नहीं किया है पसंद का मेरी जीयूआई उपकरण का उपयोग करने में सक्षम है - ओएसएक्स पर सीक्वेल प्रो - या तो। विदेशी कुंजी संबंध बनाने की कोशिश करते समय मुझे एक ही त्रुटि संदेश मिलता है।

SHOW ENGINE INNODB STATUS रिटर्न इस:

130531 17:23:06 Error in foreign key constraint of table production/#sql-7b1_2c80: 
FOREIGN KEY (`color_id`) REFERENCES `colors` (`id`): Cannot find an index in 
the referenced table where the referenced columns appear as the first columns, 
or column types in the table and the referenced table do not match for constraint. 

मैं कुछ हास्यास्पद बेवकूफ कर रहा हूँ ??

उत्तर

24

color_idunsigned नहीं है और इसमें DEFAULT NULL है। कॉलम प्रकार समान होना चाहिए।

+0

ठीक है, कि उस सवाल का जवाब - हाँ, मैं हास्यास्पद बेवकूफ था। मैं कसम खाता हूं कि जब भी मैं प्रश्न पोस्ट कर रहा था तब भी मैंने 'हस्ताक्षरित' की जांच की, लेकिन मैंने स्पष्ट रूप से नहीं किया। कितना शर्मनाक है। धन्यवाद। – Raolin

+0

@ राओलिन यह हमारे सबसे अच्छे से होता है। कम से कम आपका सवाल अच्छी तरह से लिखा गया था। – Kermit

+0

चीयर्स साथी, मुझे बहुत मदद मिली;) –

6

इसके लगभग हमेशा प्राथमिक कुंजी और विदेशी कुंजी के बीच प्रकार मेल नहीं खाता का मामला।

कुछ सुझाव दिए गए ज्यादातर मामलों में मदद करने के लिए:

  • चेक देखने के लिए तालिका आप इस क्षेत्र से संबंधित हैं की कोशिश कर रहा एक इंजन की तरह InnoDB
  • चेक foreing कुंजी यदि कॉलम हूबहू टाइप किया और nulled कर रहे हैं का समर्थन करता है का उपयोग करता है । उदाहरण के लिए (2 कॉलम मिलान प्रकार, प्रकार का आकार और चिह्न)
  • जांचें कि गंतव्य कॉलम में इंडेक्स या प्राथमिक कुंजी है या नहीं।
संबंधित मुद्दे