Mysql SQL无法添加外键约束。不知道错误在哪里
我正在学习sql并尝试创建一个数据库,但是我在这个sql中遇到了错误,我不知道为什么会出现这些错误Mysql SQL无法添加外键约束。不知道错误在哪里,mysql,sql,Mysql,Sql,我正在学习sql并尝试创建一个数据库,但是我在这个sql中遇到了错误,我不知道为什么会出现这些错误 createtableemployee( Fname varchar(15)不为空, Minit char, Lname varchar(15)不为空, Ssn字符(9)不为空, b日期, 地址:varchar(30), 性角色, 工资小数(10,2), 超级字符(9), Dno int不为空, 主键(Ssn), 外键(Super_ssn)引用员工(ssn), 外键(Dno)参考部门(DNNum
createtableemployee(
Fname varchar(15)不为空,
Minit char,
Lname varchar(15)不为空,
Ssn字符(9)不为空,
b日期,
地址:varchar(30),
性角色,
工资小数(10,2),
超级字符(9),
Dno int不为空,
主键(Ssn),
外键(Super_ssn)引用员工(ssn),
外键(Dno)参考部门(DNNumber)
);
创建表格部门(
Dname varchar(15)不为空,
Dnumber int不为空,
经理ssn字符(9)不为空,
经理开始日期,
主键(Dnumber),
唯一(Dname),
外键(经理ssn)引用员工(ssn)
);
创建表DEPT\u位置(
Dnumber int不为空,
Dlocation varchar(15)不为空,
主键(数据编号、数据位置),
外键(Dnumber)参考部门(Dnumber)
);
创建表项目(
Pname varchar(15)不为空,
Pnumber int不为空,
Plocation varchar(15),
Dnum int不为空,
主键(Pnumber),
唯一(Pname),
外键(Dnum)参考部门(DNNumber)
);
创建工作表(
Essn字符(9)不为空,
Pno int不为空,
小时小数(3,1)不为空,
主键(Essn,Pno),
外键(Essn)引用员工(Ssn),
外键(Pno)引用项目(PNNumber)
);
创建依赖于表的(
Essn字符(9)不为空,
从属名称varchar(15)不为空,
性角色,
b日期,
关系varchar(8),
主键(Essn,从属_名称),
外键(Essn)引用员工(Ssn)
);代码>首先尝试仅使用主键和唯一约束创建所有表。之后,您可以创建外键约束,如下所示
在第一个表创建中删除此行
FOREIGN KEY (Dno) REFERENCES DEPARTMENT (Dnumber)
稍后添加到下面的行
ALTER TABLE EMPLOYEE
ADD CONSTRAINT FK_Employee
FOREIGN KEY (Dno)
REFERENCES Department(Dnumber)
问题是,您正在从employee
表中引用department
,反之亦然,但当数据库引擎尝试创建employee
department
表时,该表还不存在
若要解决此问题,可以在创建两个表后,在部门
表上创建FK
创建表部门(
Dname varchar(15)不为空,
Dnumber int不为空,
经理ssn字符(9)不为空,
经理开始日期,
主键(Dnumber),
唯一(Dname)
);
创建表EMPLOYEE(
Fname varchar(15)不为空,
Minit char,
Lname varchar(15)不为空,
Ssn字符(9)不为空,
b日期,
地址:varchar(30),
性角色,
工资小数(10,2),
超级字符(9),
Dno int不为空,
主键(Ssn),
外键(Super_ssn)引用员工(ssn),
外键(Dno)参考部门(DNNumber)
);
更改表部门添加外键(经理ssn)引用员工(ssn);
--脚本的其余部分
这是一份工作报告。您遇到了哪些错误?您使用的是mySQL还是MS SQL Server(它们是不同的)?我得到了#1215-无法添加外键约束,并且在Wampt上使用mySQL这是无效的SQL Server语法,所以我猜这一定是我的mySQL?无论使用何种DBMS,都不应以纯文本形式存储SSN。但你确实在学习,所以可能这只是一个项目,而不是一个真正的应用程序。@SeanLange它只是试图学习如何编写语句。是什么使它不是validI说它不是有效的sql server语法,然后你说你正在使用mysql。它们是不同的东西,语法也不同。你怎么称呼约束有关系吗?你也可以只添加外键而不使用约束名称。