如何使用不同的名称链接外键

时间:2016-05-20 02:20:41

标签: mysql sql

我有两个不同的表:个人资料和交易

个人资料包括:pID,firstName,lastName,phoneNumb

交易包括:transID,sellerID,buyerID,itemID

我的问题是:

如何确保 sellerID buyerID 在Profile表中引用profileID时充当外键?

我现在的代码:

CREATE TABLE PROFILE
( 
pID INT NOT NULL AUTO_INCREMENT , 
firstName VARCHAR(20) NOT NULL , 
lastName INT(20) NOT NULL , 
phoneNumb INT NOT NULL , 
PRIMARY KEY (pID)
)   ENGINE = InnoDB DEFAULT CHARSET=latin1;

CREATE TABLE TRANSACTION 
( 
tID INT NOT NULL AUTO_INCREMENT , 
sellerID INT ,
buyerID INT,
itemID INT, 
PRIMARY KEY (tID),
FOREIGN KEY (sellerID, buyerID) REFERENCES PROFILE(pID),
FOREIGN KEY (itemID) REFERENCES ITEM (itemID)
)   ENGINE = InnoDB DEFAULT CHARSET=latin1;

我试过了,它给了我这种错误

  

1239 - “没有名称的外键”的外键定义不正确:键引用和表引用不匹配

感谢。

1 个答案:

答案 0 :(得分:1)

我会这样做:

CREATE TABLE TRANSACTION 
( 
    tID INT NOT NULL AUTO_INCREMENT, 
    sellerID INT,
    buyerID INT,
    itemID INT, 
    PRIMARY KEY (tID),
    CONSTRAINT fk1 FOREIGN KEY (sellerID) REFERENCES PROFILE(pID)
    CONSTRAINT fk2 FOREIGN KEY (buyerID) REFERENCES PROFILE(pID)
    CONSTRAINT itemKey FOREIGN KEY (itemID) REFERENCES ITEM (itemID)
) ENGINE = InnoDB DEFAULT CHARSET=latin1;

这假定存在一个名为ITEM的表,其中有一个名为itemID的主键。你原来的问题只提到了两个表。如果ITEM不存在,则创建它或从TRANSACTION中删除外键约束。