为什么在尝试创建此表时不断出现外键错误?

时间:2019-02-16 19:16:22

标签: mysql

我正在尝试为数据库创建表。一切都很好,除了当我尝试创建最后一个联接表时,它一直给我一个外键错误“创建具有外键约束的表'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)
    );

2 个答案:

答案 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_idcategories确实很令人困惑。我怀疑那里存在设计错误。)

答案 1 :(得分:0)

可能是因为category.category_id既不是Categories表的关键字也不是唯一字段