mysql - 外键遇到问题

标签 mysql foreign-keys mysql-error-1005

我试图将 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.categorybudget200.categories 不是更好吗该表的外键?您当前的设置看起来有点奇怪,特别是 mainBudget 中引用的列不是唯一的。

关于mysql - 外键遇到问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7067594/

相关文章:

Mysql:无法创建表 errno 150

java - Java快速导入数据到mysql

mysql - 将 SQL 更改部署到客户数据库(更改表、函数等)

mysql - 在nodejs中插入具有2列的多行

java - @JoinColumn 和@MappedBy 是如何工作的

MySQL 错误 1005

php - 使用 mysql 只插入一次行(在一个查询中)

foreign-keys - Sequelize ,将列设置为来自另一个模式的表的外键

python - DjangoForeignKey中的表单控件

mysql - 创建数据库时出错 - Errno 150