Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 生成架构时无法添加外键约束SQL_Mysql_Sql_Foreign Keys - Fatal编程技术网

Mysql 生成架构时无法添加外键约束SQL

Mysql 生成架构时无法添加外键约束SQL,mysql,sql,foreign-keys,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,

我现在正在上数据库课的介绍课。作为家庭作业,我得到了一段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");

运行此命令时,我会收到一个错误,提示
无法添加外键约束
。我尝试通过MySQL workbench和SQL Fiddle来实现这一点,两者都会产生相同的错误。我真的不知道给我的代码有什么问题,但在网上查看后,似乎看不到任何明显的问题。

这可能是你解决这个问题的练习的一部分。然而,假设不是这样,以下是重要的观察结果:

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

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

这可能是您了解这一点的练习的一部分。然而,假设不是这样,以下是重要的观察结果:

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

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

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

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

try:CONSTRAINT dno_fk外键(dno)引用部门(dno)
在删除级联时尝试:约束dno\U fk外键(dno)引用部门(dno)
在DELETE CASCADE上,下面的答案似乎不错,但我注意到您的表格中没有定义引擎。MyISAM引擎不支持外键,这在旧版本中是默认的-如果没有指定,您应该使用InnoDB,但最好也检查一下。下面的答案似乎不错,但我注意到您的表中没有定义引擎。MyISAM引擎不支持外键,它在旧版本中是默认的-如果没有指定,您应该使用InnoDB,但最好也检查一下。