无法打开引用的表

mspsb9vt  于 2021-06-21  发布在  Mysql
关注(0)|答案(2)|浏览(302)

我是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) 
);
zz2j4svz

zz2j4svz1#

你可以用一个

SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS; 
SET FOREIGN_KEY_CHECKS=0;   

## all of your schema and inserts

SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS;

此检查更改将导致发动机不检查这些钥匙,而是按原样添加它们。

jgzswidk

jgzswidk2#

在创建另一个表之前,不能创建引用该表的外键。在 Customers 你们的table

foreign key (prodID) references Products(itemID)

但是没有 Products table还没有。而且在 Employees 你有

foreign key (managerID) references Managers(mgrID)

但是 Managers 表是在它之后创建的。
您需要重新排序您的表创建。创建 Products 之前 Customers .
此外,不能有循环外键关系。 Employees.managerID 参考文献 Managers 以及 Managers.mgrID 参考文献 Employees . 这就产生了一个鸡毛蒜皮的问题:既然第一个员工需要一个经理,你怎么创建第一个员工,但是你不能创建第一个经理,因为它需要引用一个员工。
您可以通过允许外键为空来解决这个问题。因此,创建第一个经理为空的员工,然后创建经理,然后替换 managerID 用这个身份证。
在创建这两个表时还存在鸡和蛋的问题。不能引用尚未创建的表。所以别提这个了 foreign key 在创建表时指定,然后使用 ALTER TABLE .

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)
 );

create table Managers(
    mgrID int not null,
    salary float,
   MaxSupervisingCapacity int,
   foreign key (mgrID) references Employees(EmployeeID),
   primary key (mgrID) 
);

alter table Employees add foreign key (managerID) references Managers(mgrID);

相关问题