小编典典

使用两个外键作为主键-MySQL

sql

我对MySQL相当陌生(必须为uni学习)。我必须为任务创建数据库和Web界面。

在其中一张表上,我有两列,这两列都是外键,我需要将它们都用作主键。

到目前为止,这是代码:

drop database if exists testJoke;
create database testJoke;
use testJoke;

CREATE TABLE Author
(
  id           int(11)   NOT NULL ,
  name         varchar(255) NULL ,
  cust_email   varchar(255) NULL,
  password char(32) null,

  PRIMARY KEY (id)


);


**CREATE TABLE AuthorRole
(
  authorid  int(11) NOT NULL ,
  roleid varchar(255) NOT NULL,
  PRIMARY KEY (authorid, roleid),
  FOREIGN KEY(authorid) REFERENCES Author(id),
  FOREIGN KEY(roleid) REFERENCES Role(id)

);**



CREATE TABLE Category
(
  id  int(11)      NOT NULL ,
  name varchar(255) NULL,
  PRIMARY KEY (id)
);


CREATE TABLE Joke
(
  id    int(11)      NOT NULL ,
  joketext   text    NULL ,
  jokedate    date   NOT NULL ,
  authorid int(11)   NULL,
  PRIMARY KEY (id),
  FOREIGN KEY(authorid) REFERENCES Author(id)

);


CREATE TABLE JokeCategory
(
  jokeid    int(11)      NOT NULL ,
  categoryid    int(11)  NOT NULL ,
  PRIMARY KEY (jokeid, categoryid),
  FOREIGN KEY(jokeid) REFERENCES Joke(id),
  FOREIGN KEY(categoryid) REFERENCES Category(id)**


);

CREATE TABLE Role
(
  id    varchar(255)      NOT NULL ,
  description  varchar(255)  NULL ,
  PRIMARY KEY (id)
);

所有的表语法都与提供的数据字典一致。

当我在mysql命令行中运行此命令时,在上面以粗体突出显示的部分(表“ AuthorRole”)上出现错误,说它“无法添加外键约束”。

我已经尝试调试它,看来是这样的:

FOREIGN KEY(roleid) REFERENCES Role(id)

引起问题的外键(如果我将其删除,则一切工作正常,并且如果我将其保留并删除另一个外键,则会出现错误)。

如果有人可以解释我哪里出了问题,我将不胜感激。

我曾尝试使用Google搜索,但无法找到任何内容(可能是因为我使用了错误的关键字)。

谢谢


阅读 287

收藏
2021-04-22

共1个答案

小编典典

首先创建表“ Role”,然后创建表“ AuthorRole”,这样就可以了

CREATE TABLE Role
(
  id    varchar(255)      NOT NULL ,
  description  varchar(255)  NULL ,
  PRIMARY KEY (id)
);

CREATE TABLE AuthorRole
(
  authorid  int(11) NOT NULL ,
  roleid varchar(255) NOT NULL,
  PRIMARY KEY (authorid, roleid),
  FOREIGN KEY(authorid) REFERENCES Author(id),
  FOREIGN KEY(roleid) REFERENCES Role(id)
);

当创建主键时,最好使用 id INT(11) NOT NULL AUTO_INCREMENT

2021-04-22