SQL在引用表错误中引用外键

时间:2018-03-20 18:07:23

标签: mysql sql mysql-workbench

非常喜欢这个脚本的帮助...一切顺利:创建数据库并创建Catergory,Product_Has_Suppiers和Product表。当我尝试执行供应商时,创建表格'声明它返回1215错误'无法添加外键约束'。

-- Create database
Create database if not exists FinalExam;

-- Use Database
Use FinalExamReview;

-- Create table
Create table if not exists Category(
Cat_id int primary key,
`name` varchar(50));

Create table if not exists Product_Has_Suppliers(
Product_Product_ID int,
Suppliers_Supplier_Code int,
Constraint PHS_Keys Primary key (Product_Product_ID, 
Suppliers_Supplier_Code));

Create table if not exists Product(
Product_ID int auto_increment,
`Name` varchar(25) not null,
Price decimal(4,2) not null, 
decription varchar(45),
last_update timestamp not null, 
Category_Cat_ID int,
Foreign key (Category_Cat_ID) References Category(Cat_ID),
Foreign key (Product_ID) References 
Product_Has_Suppliers(Product_Product_ID));

Create table if not exists Suppliers(
Supplier_Code int auto_increment,
`Name` varchar(45),
city varchar(25),
state char(2),
foreign key (Supplier_Code) References 
product_has_suppliers(suppliers_supplier_code));

1 个答案:

答案 0 :(得分:0)

这可以解决您的错误:

part1

SQL小提琴是here

你似乎没有理解什么?

首先,Create table if not exists Categories ( category_id int primary key, name varchar(50) ); Create table if not exists Products ( Product_ID int auto_increment primary key, Name varchar(25) not null, Price decimal(4,2) not null, decription varchar(45), last_update timestamp not null, category_id int, Foreign key (category_id) References Categories(category_id) ); Create table if not exists Suppliers ( Supplier_Id int auto_increment primary key, Name varchar(45), city varchar(25), state char(2) ); Create table if not exists Product_Has_Suppliers( Product_ID int, Supplier_Id int, Constraint PHS_Keys Primary key (Product_ID, Supplier_Code), Foreign key (Product_ID) References Products(Product_ID), foreign key (Supplier_Id) References Suppliers(Supplier_Id) ); Suppliers实体。实体具有主键,通常是自动递增的值。您将这些列定义为外键。但主键是唯一标识每一行的内容。

其次,Products联结表(又名“关联”表)。它将两个表与多对多关系链接起来(产品有多个供应商,供应商提供多个产品。它应该与其他表有外键关系。

当我参与其中时,我做了一些我认为最佳做法的其他更改:

  • 表名都是复数(它们是其中实体的桶,应该有多个)。
  • 主键是表名的单数,后跟Product_Has_Suppliers
  • 外键与主键同名。这是一个很大的便利,因此您可以使用_id子句 - 例如。

如果您遵循这些规则,那么代码就是自我记录的。您可以查看一个表,只需知道外键所指的名称即可。