构建架构时无法添加外键约束 SQL

Cannot add foreign key constraint SQL when building schema

我现在正在学习数据库 class。对于家庭作业,我得到了一段 SQL 代码,并被告知只需 运行 一些查询并返回结果。问题是我什至不能用我老师给我的代码构建模式。这是这段代码:

CREATE TABLE emp (
  name char(15),
  dno int,
  FOREIGN KEY (dno) REFERENCES dept(dno)
  ON DELETE SET NULL
  ON UPDATE CASCADE
  );

CREATE TABLE dept (
  dno int,
  location char(30)
 );

INSERT INTO emp(name,dno) VALUES
("Tom",111),
("Mary",111),
("Jack",222),
("Henry",222);

INSERT INTO dept(dno, location) VALUES
(111,"Irvine"),
(222,"LA"),
(333,"SF");

当这个 运行 时,我收到一条错误消息 Cannot add foreign key constraint。我尝试通过 MySQL workbench 和 SQL Fiddle 执行此操作,两者都会产生相同的错误。我真的不知道给我的代码有什么问题,在网上查看后,似乎看不到任何明显的东西。

这可能是您练习的一部分。但是,假设不是,这里有重要的观察结果:

  • 外键引用应该是主键,table都没有主键。
  • 被引用的table必须在被引用前定义。

您可以着手解决这些问题。 Here 是具有正确定义的 SQL Fiddle。

第一个 table (emp) 的定义引用了尚未创建的 table (dept)。您必须先创建 'dept' 才能创建它的一个外键变成另一个 table。

按以下顺序执行查询:

CREATE TABLE dept (
  dno int,
  location char(30)
 );

CREATE TABLE emp (
  name char(15),
  dno int,
  FOREIGN KEY (dno) REFERENCES dept(dno)
  ON DELETE SET NULL
  ON UPDATE CASCADE
  );

INSERT INTO emp(name,dno) VALUES
("Tom",111),
("Mary",111),
("Jack",222),
("Henry",222);

INSERT INTO dept(dno, location) VALUES
(111,"Irvine"),
(222,"LA"),
(333,"SF");

try :CONSTRAINT dno_fk FOREIGN KEY (dno) REFERENCES dept(dno) 删除级联