我是sql新手,不太清楚为什么会出现这样的错误:第5行的错误1824(hy000):无法打开引用的表“products”,操作失败,exitcode为1
这是我的密码
drop database if exists cc;
create database cc /*!40100 default character set utf8 */;
use cc;
create table Customers(
CustomerID int not null,
FirstName varchar(255),
LastName varchar(255),
address varchar(255),
phoneNO varchar(11),
prodID int,
quantity int,
primary key (CustomerID),
foreign key (prodID) references Products(itemID)
);
create table Employees(
EmployeeID int not null,
FirstName varchar(255),
LastName varchar(255),
address varchar(255),
phoneNO varchar(11),
ManagerID int not null,
primary key (EmployeeID),
foreign key (managerID) references Managers(mgrID)
);
create table Managers(
mgrID int not null,
salary float,
MaxSupervisingCapacity int,
foreign key (mgrID) references Employees(EmployeeID),
primary key (mgrID)
);
2条答案
按热度按时间zz2j4svz1#
你可以用一个
此检查更改将导致发动机不检查这些钥匙,而是按原样添加它们。
jgzswidk2#
在创建另一个表之前,不能创建引用该表的外键。在
Customers
你们的table但是没有
Products
table还没有。而且在Employees
你有但是
Managers
表是在它之后创建的。您需要重新排序您的表创建。创建
Products
之前Customers
.此外,不能有循环外键关系。
Employees.managerID
参考文献Managers
以及Managers.mgrID
参考文献Employees
. 这就产生了一个鸡毛蒜皮的问题:既然第一个员工需要一个经理,你怎么创建第一个员工,但是你不能创建第一个经理,因为它需要引用一个员工。您可以通过允许外键为空来解决这个问题。因此,创建第一个经理为空的员工,然后创建经理,然后替换
managerID
用这个身份证。在创建这两个表时还存在鸡和蛋的问题。不能引用尚未创建的表。所以别提这个了
foreign key
在创建表时指定,然后使用ALTER TABLE
.