2011-08-25 10 views
6

वास्तव में अन्य लोगों के समय का उपयोग करने से नफरत है, लेकिन ऐसा लगता है कि समस्या अभी नहीं जा रही है।तालिका नहीं बना सकता (errno: 150) InnoDB विदेशी कुंजी बाधाओं को जोड़ना

मैंने सभी सिफारिशों को http://verysimple.com/2006/10/22/mysql-error-number-1005-cant-create-table-mydbsql-328_45frm-errno-150/ पर और http://forums.mysql.com/read.php?22,19755,19755#msg-19755 पर कुछ भी नहीं माना लेकिन कुछ भी नहीं।

उम्मीद है कि कोई बेवकूफ गलती को इंगित करता है।

CREATE TABLE IF NOT EXISTS `shop`.`category` (
    `id` INT(11) NOT NULL AUTO_INCREMENT , 
    `category_id` INT(11) NOT NULL , 
    `parent_id` INT(11) NULL DEFAULT '0' , 
    `lang_id` INT(11) NOT NULL , 
    ...other columns... 
    PRIMARY KEY (`id`, `category_id`)) 
ENGINE = InnoDB 
DEFAULT CHARACTER SET = utf8 
COLLATE = utf8_unicode_ci; 



CREATE TABLE IF NOT EXISTS `shop`.`product_category` (
    `category_id` INT(11) NOT NULL , 
    `product_id` INT(11) NOT NULL , 
    INDEX `fk_product_category_category1_zxc` (`category_id` ASC) , 
    CONSTRAINT `fk_product_category_category1_zxc` 
    FOREIGN KEY (`category_id`) 
    REFERENCES `shop`.`category` (`category_id`) 
    ON DELETE NO ACTION 
    ON UPDATE NO ACTION) 
ENGINE = InnoDB 
DEFAULT CHARACTER SET = utf8 
COLLATE = utf8_unicode_ci; 

त्रुटि कोड::

यहाँ टेबल रहे हैं 1005. तालिका 'shop.product_category' (errno: 150) नहीं बना सकता

उत्तर

9

आप श्रेणी तालिका में category_id पर एक सूचकांक की जरूरत है (मुझे लगता है कि यह प्राथमिक कुंजी का हिस्सा है, लेकिन चूंकि यह इंडेक्स में दूसरा कॉलम है, इसका उपयोग नहीं किया जा सकता है)। जिस क्षेत्र में आप विदेशी कुंजी में संदर्भित कर रहे हैं उसे हमेशा अनुक्रमित किया जाना चाहिए।

+0

धन्यवाद! इसने समस्या हल की! –

+0

यदि यह समस्या हल हो गई है तो उत्तर को स्वीकार के रूप में चिह्नित करें! – ddinchev

+0

क्षमा करें, मैं यह कैसे कर सकता हूं? –

1

मेरे मामले में यह मुद्दा आपके द्वारा लिंक किए गए पहले लेख में वर्णित जैसा था।

  • Referenced Column एक सूचकांक है,
  • दोनों Referencing Column और Referenced Column शेयर एक ही प्रकार और लंबाई, अर्थात उदहारण के लिए:

    तो मैं बस यह सुनिश्चित करें कि करना था दोनों INT(10) हैं,

  • दोनों एक ही नहीं अशक्त, अहस्ताक्षरित, zerofill आदि विन्यास को साझा करें।
  • दोनों टेबल InnoDB हैं!

क्वेरी टेम्पलेट जहां Referencing Columnreferencing_id है और Referenced Columnreferenced_id है:

ALTER TABLE `db`.`referencing` 
ADD CONSTRAINT `my_fk_idx` 
FOREIGN KEY (`referencing_id`) 
REFERENCES `db`.`referenced`(`referenced_id`) 
ON DELETE NO ACTION 
ON UPDATE NO ACTION; 

अद्यतन 2016/03/13: फिर से इस समस्या में पड़ गए, मेरे अपने उत्तर ढूंढना समाप्त हो गया। इस बार यह मदद नहीं की थी। दूसरी तालिका को अभी भी MyISAM पर सेट किया गया था, जैसे ही मैंने इसे InnoDB में बदल दिया, सब कुछ काम किया।

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