2016-10-03 399 views
0

由於某種原因,我無法在MySQL上運行此SQL腳本。我相信我也擁有所有的外鍵。它運行良好,如果變量類型是INT,但是,如果它是VARCHAR它給了我一個錯誤代碼#1005。任何人都知道發生了什麼?錯誤代碼:1005無法創建表(MySQL)

DROP TABLE IF EXISTS `test_table_2`; 
DROP TABLE IF EXISTS `test_table_1`; 

CREATE TABLE `test_table_1` (
    ID int NOT NULL AUTO_INCREMENT, 
    `color` VARCHAR(15) NOT NULL, 
    PRIMARY KEY(ID) 
) ENGINE = InnoDB DEFAULT CHARSET = utf8; 

CREATE TABLE `test_table_2` (
    ID int NOT NULL AUTO_INCREMENT, 
    `test_id` int(10) NOT NULL, 
    `color` VARCHAR(15) NOT NULL, 
    PRIMARY KEY(ID), 
    CONSTRAINT `fk_color` FOREIGN KEY (`color`) REFERENCES `test_table_1` (`ID`) 
) ENGINE = InnoDB DEFAULT CHARSET = utf8; 

的問題在於與線:

CONSTRAINT `fk_color` FOREIGN KEY (`color`) REFERENCES `test_table_1` (`ID`) 
+0

發佈錯誤信息 –

+0

'錯誤代碼:1005.無法創建表'frisbita.test_table_2'(errno:150)' – Donson

回答

3

你正試圖從test_table_1參考INT類型的IDColortest_table_2所以它應該是類型INT

CREATE TABLE `test_table_2` (
    ID int NOT NULL AUTO_INCREMENT, 
    `test_id` int(10) NOT NULL, 
    `color` INT NOT NULL, --here 
    PRIMARY KEY(ID), 
    CONSTRAINT `fk_color` FOREIGN KEY (`color`) REFERENCES `test_table_1` (`ID`) 
) ENGINE = InnoDB DEFAULT CHARSET = utf8; 

基本上引用列的數據類型必須與第e父表列

+0

但是,如果我只想在該列中存儲字符表? – Donson

+0

在我想說的「顏色」專欄中。 – Donson

+0

@Donson - 那你就失去了創建外鍵的意義。你應該在'test_table_1'中存儲每個'color'生成的'ID' –

相關問題