我有两个表,即客户和交易表。事务表有两个外键,它们引用customer表中的两个字段。
我添加了customer表,但是当我尝试添加事务表时,它给了我:
SQL错误[1215] [HY000]无法添加外键约束
以下是我的表格。
CREATE TABLE customerDetails(
CustomerID varchar(10)NOT NULL,
AccountNumber varchar(15) NOT NULL,
CustomerName varchar(60)NOT NULL,
Address varchar(60),
phone varchar(15),
email varchar(50),
joinedDate date,
primary key(CustomerID)
)
CREATE TABLE transactions(
TraceNumber varchar(30) NOT NULL,
AccountNumber varchar(15)NOT NULL,
CustomerName varchar(60)NOT NULL,
TransactionType varchar(15) NOT NULL,
TransactionDateTime datetime NOT NULL,
TransactionAmount double DEFAULT NULL,
PRIMARY KEY (TraceNumber),
FOREIGN KEY(CustomerName) REFERENCES customerDetails(CustomerName),
FOREIGN KEY(AccountNumber) REFERENCES customerDetails(AccountNumber)
)ENGINE=InnoDB DEFAULT CHARSET=utf8;
答案 0 :(得分:4)
问题在于:
FOREIGN KEY(AccountNumber) REFERENCES customerDetails(AccountNumber)
为了建立外键关系,父表列必须是主键或唯一,但在您的情况下,AccountNumber
既不是主键也不是唯一键。所以相应地改变它。
答案 1 :(得分:3)
您应该使用CustomerID
,因为您已创建customerDetails
表,主列为CustomerID
列。 CustomerID
应该被称为外键而不是customerName
。
使用以下结构创建transactions
表。
此外,您不需要在此处映射AccountNumber
,因为您要使用CustomerID
进行映射。
CREATE TABLE transactions(
TraceNumber varchar(30) NOT NULL,
AccountNumber varchar(15)NOT NULL,
CustomerID INT NOT NULL,
TransactionType varchar(15) NOT NULL,
TransactionDateTime datetime NOT NULL,
TransactionAmount double DEFAULT NULL,
PRIMARY KEY (TraceNumber),
FOREIGN KEY(CustomerName) REFERENCES customerDetails(CustomerID)
)ENGINE=InnoDB DEFAULT CHARSET=utf8;