MySQL错误[1215] [HY000] - 无法添加外键[重复]

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

这个问题在这里已有答案:

我有两个表是客户和交易表。事务表有两个外键,它们引用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;
mysql sql
2个回答
4
投票

问题在于:

FOREIGN KEY(AccountNumber) REFERENCES customerDetails(AccountNumber)

要创建外键关系,父表列必须是主键或唯一,但在您的情况下,AccountNumber既不是主键也不是唯一键。所以相应地改变它。


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;
© www.soinside.com 2019 - 2024. All rights reserved.