我正在尝试为数据库创建表。一切都很好,除了当我尝试创建最后一个联接表时,它一直给我一个外键错误“创建具有外键约束的表'refactor_test / ads_categories'失败。在被引用的表中没有索引,其中被引用的列出现了作为第一列。”
以下是我用于创建每个表的参数,经常抛出错误的参数是ads_categories:
create table ads
(
id int unsigned not null auto_increment,
user_id int unsigned not null,
title varchar(100) not null,
description varchar(500),
primary key (id),
foreign key (user_id) references refactor_test.users (id)
);
create table users
(
id int unsigned not null auto_increment,
username varchar(25) not null,
password varchar(100) not null,
email varchar(40) not null,
primary key (id)
);
create table categories
(
id int unsigned auto_increment not null,
category varchar(50) not null,
category_id int unsigned not null,
primary key (id)
);
create table ads_categories
(
id int unsigned auto_increment not null,
ad_id int unsigned not null,
ad_category int unsigned not null,
primary key (id),
foreign key (ad_id) references refactor_test.ads (id),
foreign key (ad_category) references refactor_test.categories (category_id)
);
答案 0 :(得分:2)
外键链接到目标表的主键。在这里,您尝试链接到category_id
表上的categories
:
foreign key (ad_category) references refactor_test.categories (category_id)
但这不是该表的主键。 id
是:
foreign key (ad_category) references refactor_test.categories (id)
(id
表中同时有category_id
和categories
确实很令人困惑。我怀疑那里存在设计错误。)
答案 1 :(得分:0)
可能是因为category.category_id既不是Categories表的关键字也不是唯一字段