MYSQL->;外键->;错误号150

MYSQL->;外键->;错误号150,mysql,reference,foreign-keys,Mysql,Reference,Foreign Keys,我有以下问题。这些是我的桌子: CREATE TABLE Author ( author_fName VARCHAR(256) NOT NULL, author_lName VARCHAR(256) NOT NULL, author_dob DATE, PRIMARY KEY (author_fName, author_lName) # author_age INT ); CREATE TABLE Director ( director_fName VARCHAR(25

我有以下问题。这些是我的桌子:

CREATE TABLE Author
(
  author_fName VARCHAR(256) NOT NULL,
  author_lName VARCHAR(256) NOT NULL,
  author_dob DATE,
  PRIMARY KEY (author_fName, author_lName)
  # author_age INT
);

CREATE TABLE Director
(
  director_fName VARCHAR(256) NOT NULL,
  director_lName VARCHAR(256) NOT NULL,
  director_dob DATE,
  PRIMARY KEY (director_fName, director_lName)
);

CREATE TABLE Award
(
  award_Name VARCHAR(256) NOT NULL PRIMARY KEY,
  a_fName VARCHAR(256),
  a_lName VARCHAR(256),
  d_fName VARCHAR(256),
  d_lName VARCHAR(256),
  FOREIGN KEY (a_fName) REFERENCES Author(author_fName),
  FOREIGN KEY (a_lName) REFERENCES Author(author_lName),
  FOREIGN KEY (d_fName) REFERENCES Director(director_fName),
  FOREIGN KEY (d_lName) REFERENCES Director(director_lName)
);
遗憾的是,当我尝试创建最后一个表时,我收到了一个可爱的错误NO 150。 我进行了一点调查,发现当我试图为a_lName和d_lName设置外键时,会出现错误


我不知道为什么会发生这种情况。

引用的字段必须按照引用的顺序编制索引,因为您引用的是
Director。Director\u lname本身必须是
Director
表中索引的第一个字段。您在引用
Author.Author\u lName
时应该会遇到类似的问题

旁注:

  • 更典型的是,对于这些类型的表以及引用这些主键的引用,使用代理自动递增主键
  • 在每个字段前面加上表名会使将来的查询变得不必要的长;如果需要区分不同表中的字段,只需指定表名(或查询中使用的较短别名)即可。示例:
    从Director中选择d.fname作为d
  • 如果保留当前设计,fk引用将允许一些奇怪的行为。它允许
    奖励
    引用一名董事的
    fname
    ,以及另一名董事的
    lname
    ,即使组合不存在。示例:“Hayao Spielberg”

MySQL错误附带一个文本.description.,您的屏幕上就有它,所以您没有理由不在帖子中提供它。我们不应该用谷歌搜索错误消息来获得描述。您要求我们帮助您,通过提供您的帖子中已有的信息,使我们尽可能方便地帮助您,这符合您的最大利益。