这个问题在这里已有答案:
我有两个表是客户和交易表。事务表有两个外键,它们引用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;
问题在于:
FOREIGN KEY(AccountNumber) REFERENCES customerDetails(AccountNumber)
要创建外键关系,父表列必须是主键或唯一,但在您的情况下,AccountNumber
既不是主键也不是唯一键。所以相应地改变它。
您应该使用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;