2015-09-15 64 views
0

我有以下表格,我試圖在MySQL中運行它們,但我一直在得到一個errno 150.只是不知道爲什麼,但MySQL似乎無法創建外鍵約束。我已經看過InnoDB設置FK的規則,一切似乎都沒問題。有人可以借我另一套眼睛和專業知識嗎?MySQL InnoDB外鍵問題

-- Table publication_type (parent table) 
CREATE TABLE publication_type (
    id int(11) UNSIGNED NOT NULL AUTO_INCREMENT, 
    publication_type varchar(55) NOT NULL, 
    tstamp timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, 
    CONSTRAINT publication_type_pk PRIMARY KEY (id) 
)ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1; 

-- Table publication (child table) 
CREATE TABLE publication (
    id int(11) UNSIGNED NOT NULL AUTO_INCREMENT, 
    authors varchar(255) NOT NULL, 
    publication_title varchar(100) NOT NULL, 
    publication_type_id int(11) UNSIGNED NOT NULL, 
    user_id int(11) UNSIGNED NOT NULL, 
    CONSTRAINT publication_pk PRIMARY KEY (id), 
    CONSTRAINT publication_type_fk FOREIGN KEY (publication_type_id) REFERENCES publication_type(id) ON DELETE SET NULL ON UPDATE NO ACTION 
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1; 

回答

0

的類型不匹配:

publication_type.id是類型int UNSIGNED

publication.publication_type_id的是類型int

又見文檔的:http://dev.mysql.com/doc/refman/5.1/en/create-table-foreign-keys.html,具體有:

相應的列s的外鍵,並且引用鍵必須有 具有相似的數據類型。 整數類型的大小和符號必須是 與相同。字符串類型的長度不需要相同。對於 非二進制(字符)字符串列,字符集和校對 必須相同。

強調我的。

+0

感謝@Matteo,但我編輯了腳本(見上面),它仍然給出相同的錯誤。 – gabz

+0

然後運行'SHOW INNODB STATUS'並檢查實際的錯誤可能是什麼。 –