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

时间:2015-05-17 20:19:48

标签: mysql sql foreign-keys

我现在正在介绍数据库类。对于家庭作业,我获得了一段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来做这件事,两者都会产生同样的错误。我不知道给我的代码有什么不对,但在网上看之后,似乎看不到任何明显的东西。

3 个答案:

答案 0 :(得分:5)

这可能是练习的一部分,你可以弄明白这一点。但是,假设不是,这里有重要的观察结果:

  • 外键引用应该是主键,两个表都没有主键。
  • 必须先定义被引用的表,然后才能引用它。

您可以解决这些问题。 Here是一个具有正确定义的SQL小提琴。

答案 1 :(得分:1)

第一个表(emp)的定义引用了一个尚未创建的表(dept)。你必须创建第一个表'dept'将其外键创建到另一个表中。

按此顺序执行查询:

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");

答案 2 :(得分:0)

尝试:CONSTRAINT dno_fk FOREIGN KEY(dno)REFERENCES dept(dno)      ON DELETE CASCADE