错误1005(HY000)mySql,在小型数据库上[重复]

问题描述 投票:0回答:1

[嘿,所以我刚开始使用mysql并制作了一个小型数据库,但是后来我尝试更改某些表以隐含一些外键,但出现错误:ERROR 1005(HY000):无法创建表etron3。[ C0](错误号:150“外键约束格式不正确”)。

我知道将TillNo更改为TillN的重要键时的原因,但是我真的看不到问题出在哪里。

purchase
mysql database foreign-keys
1个回答
0
投票

考虑代码的这一部分:

create table BRANCH(BranchNo INT, BranchAddr VARCHAR(25), BranchTell INT, PRIMARY KEY(BranchNo));


/*Create table CUSTOMER*/
create table CUSTOMER(CustNum INT, CustTell INT, CustFname VARCHAR(15), CustLname VARCHAR(15), CustCountry VARCHAR(20),
CustTown VARCHAR(20), CustStreet VARCHAR(20), CustPostCode CHAR(7), CustDob DATE, CustEmail VARCHAR(45), PRIMARY KEY(CustNum, CustTell));


/*Create table ASSISTANT*/
create table ASSISTANT(SalesPNo INT,TillN INT , SalePFname VARCHAR(20), SalePLname VARCHAR(20), PRIMARY KEY(SalesPNo, TillN));


/*Create table PURCHASE*/
create table PURCHASE(TDateTime DATETIME, TillNo INT, CustNo INT, AssistantNo INT, ProdCode INT, Qty INT, PRIMARY KEY(TDateTime));


/*Create table SUPPLIER*/
create table SUPPLIER(SupCnum INT, SupCname VARCHAR(15), SupFname VARCHAR(15), SupLname VARCHAR(15), SupEmail VARCHAR(30), ProdNum INT, PRIMARY KEY(SupCnum));


/*Create table PRODUCT*/
create table PRODUCT(ProductCode INT, PType VARCHAR(20), Price INT, OfferPrice INT, PRIMARY KEY(ProductCode, PType));


/*Create table PRODTYPE*/
create table PRODTYPE(ProdGroup VARCHAR(20), PCode INT, PRIMARY KEY(ProdGroup));



/*Altering tables, adding foreign keys, so that I don't get any errors*/



/*Add primary and foreign keys to PURCHASE*/

ALTER TABLE PURCHASE
ADD FOREIGN KEY(AssistantNo) REFERENCES ASSISTANT(SalesPNo);

ALTER TABLE PURCHASE
ADD FOREIGN KEY(ProdCode) REFERENCES PRODUCT(ProductCode);

ALTER TABLE PURCHASE
ADD FOREIGN KEY(CustNo) REFERENCES CUSTOMER(CustNum);

ALTER TABLE PURCHASE
ADD FOREIGN KEY (TillNo) REFERENCES ASSISTANT(TillN);

/*Add foreign key to SUPPLIER*/
ALTER TABLE SUPPLIER
ADD FOREIGN KEY(ProdNum) REFERENCES PRODUCT (ProductCode);


/*Add primary and foreign keys to PRODTYPE*/

ALTER TABLE PRODTYPE
ADD FOREIGN KEY(PCode) REFERENCES PRODUCT(ProductCode);

ALTER TABLE PURCHASE ADD FOREIGN KEY(AssistantNo) REFERENCES ASSISTANT(SalesPNo); ALTER TABLE PURCHASE ADD FOREIGN KEY (TillNo) REFERENCES ASSISTANT(TillN); 表的主键是ASSISTANT

从技术上讲,您不能仅在第二列上有外键点-MySQL希望对引用的列进行索引,或在复合索引中显示first

功能上,您很可能想要一个compound外键,而不是两个单独的外键,所以:

(SalesPNo, TillN)

通过此更改,您的脚本可以在ALTER TABLE PURCHASE ADD FOREIGN KEY (AssistantNo, TillNo) REFERENCES ASSISTANT(SalesPNo, TillN); 中成功运行。

© www.soinside.com 2019 - 2024. All rights reserved.