繁体   English   中英

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

[英]Cannot add foreign key constraint SQL when building schema

我现在正在介绍数据库类。 对于一项家庭作业,我得到了一段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工作台和SQL Fiddle来执行此操作,这两者都会产生相同的错误。 我真的不知道给我的代码有什么问题,而且在网上查看后,似乎看不到明显的东西。

您可能需要做的一部分练习。 但是,假设并非如此,以下是重要的观察结果:

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

您可以解决这些问题。 是带有正确定义的SQL Fiddle。

第一个表(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");

尝试:CONSTRAINT dno_fk外键(dno)参考DEPT(dno)删除级联

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM