Mysql 生成架构时无法添加外键约束SQL
我现在正在上数据库课的介绍课。作为家庭作业,我得到了一段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,
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,但最好也检查一下。