我试图将 Budget2000 表中的类别作为 mainBudget 中类别的外键。类别不是唯一的数字,因此它不能是主键。当我运行代码时,我收到了著名的错误 1005。当我使用 id 将类别作为 mainBudget 中主键的一部分时,代码会运行,但这会在以后产生问题。我该怎么做才能使类别成为外键。我使用的是mysql 5.5。
这是我的代码
create table mainBudget(
id SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT,
year Year NOT NULL,
amount double(10,2) NOT NULL,
category SMALLINT UNSIGNED NOT NULL,
primary key(id)
)ENGINE=INNODB;
create table budget2000(
id SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT,
categories SMALLINT UNSIGNED NOT NULL,
INDEX categoryNumber (categories),
subCategory SMALLINT NOT NULL,
amount FLOAT(10,2) NOT NULL,
date DATE NOT NULL,
description VARCHAR(300) NOT NULL,
primary key(id),
FOREIGN KEY (categories) REFERENCES mainBudget(category)
)ENGINE=INNODB;
最佳答案
category
未在 mainBudget
中建立索引。引用表中的列必须建立索引(或索引的左前缀)。
顺便说一句,您确定拥有一个额外的表 category
并同时拥有 mainBudget.category
和 budget200.categories
不是更好吗该表的外键?您当前的设置看起来有点奇怪,特别是 mainBudget
中引用的列不是唯一的。
关于mysql - 外键遇到问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7067594/