出于某种原因,我无法在MySQL上运行此SQL脚本。我相信我也设置了所有外键。如果变量类型是INT
,它运行正常,但是,如果它是VARCHAR
,它会给我一个错误代码#1005。有人知道发生了什么吗?
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 :(得分:3)
您正尝试在ID
中将INT
test_table_1
类Color
列从test_table_2
列引用至INT
列,因此它应为{{1}类型}
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;
基本上,引用列必须与父表列
具有相同的数据类型