在产品表中创建外键时出错

时间:2017-02-15 12:30:20

标签: mysql foreign-keys primary-key create-table

我创建了一个表供应商n MySQL 供应商说明:

Supplier_ID varchar(5) NOT NULL
Supplier_Name varchar(30)
Supplier_Address varchar(50)
Supplier_Contact int(12)
Supplier_Email varchar(30)
PRIMARY KEY(Supplier_ID)

现在, 我想创建表产品 产品说明将是:

Product_ID varchar(5) NOT NULL
Product_Name varchar(30)
Supp_Name varchar(30)
Product_Category varchar(20)
Unit_Price int(11)
Unit_In_Stock int(11)
PRIMARY KEY(Product_ID)
FOREIGN KEY(Supp_Name) REFERENCES Suppliers(Supplier_Name)

但是当我尝试创建产品表时,它会出现错误

  

ERROR 1005(HY000):无法创建表'csm.products'(错误:150)

CSM是一个数据库名称。

3 个答案:

答案 0 :(得分:1)

正如@juergend在评论中指出的那样,你应该引用外键中的Supplier_ID字段,而不是Supplier_Name,你也应该用{{Supplier_Name替换Supplier_ID。您products表中的1}}字段。我还会将供应商ID的数据类型更改为整数,可能是自动递增的。

原因是

  1. 您可能有多个名称相同的供应商
  2. 供应商可以随时更改名称
  3. 在长的可变长度字符串上交叉检查固定长度的整数值要高效得多。
  4. Si,我会按如下方式更改products表:

    Product_ID varchar(5) NOT NULL,
    Product_Name varchar(30),
    Supplier_ID int NOT NULL,
    Product_Category varchar(20),
    Unit_Price int(11),
    Unit_In_Stock int(11),
    PRIMARY KEY(Product_ID),
    FOREIGN KEY(Supplier_ID) REFERENCES Suppliers(Supplier_iD)
    

    supplier表:

    Supplier_ID int NOT NULL [auto_increment]
    Supplier_Name varchar(30)
    Supplier_Address varchar(50)
    Supplier_Contact int(12)
    Supplier_Email varchar(30)
    PRIMARY KEY(Supplier_ID)
    

答案 1 :(得分:0)

试试这个:

Product_ID varchar(5) NOT NULL,
Product_Name varchar(30),
Supplier_ID varchar(5) NOT NULL,
Product_Category varchar(20),
Unit_Price int(11),
Unit_In_Stock int(11),
PRIMARY KEY(Product_ID),
FOREIGN KEY(Supplier_ID) REFERENCES Suppliers(Supplier_iD)

答案 2 :(得分:0)

如果您希望将名称作为参考,请确保引用ID而不是名称,将供应商名称作为主要名称,将ID作为唯一名称。虽然ID主键是高度推荐的