Mysql外键

时间:2011-05-24 21:43:07

标签: mysql database database-design

我想通过IdProduct在表客户和表产品之间建立链接。

示例:

Create table customer(
idcustomer  INT not null,
name        Varchar(20),
idproduct   INT,
);

create table Product(
idproduct INT not null,
nameProduct varchar(40)
);

如何将两者联系起来,就像外键系统一样,当我选择一个客户时,我可以得到他所有的产品?这是关于数据库结构的问题。

3 个答案:

答案 0 :(得分:2)

您想引入第3个表来解决客户和产品之间的多对多关系。它应该包含idcustomeridproduct

enter image description here

然后,获取给定客户的所有产品:

SELECT c.name, p.nameProduct
    FROM Customer c
        INNER JOIN CustomerProductXref cpx
            ON c.idcustomer = cpx.idcustomer
        INNER JOIN product p
            ON cpx.idproduct = p.idproduct
    WHERE c.idcustomer = 12345

答案 1 :(得分:1)

以下是您如何制定外键约束(忽略Joe正确建议的基数问题):

CREATE table Product(
    idproduct INT not null,
    nameProduct varchar(40),
    PRIMARY KEY (idproduct )
);  

CREATE table customer(
    idcustomer  INT not null,
    name        Varchar(20),
    idproduct   INT,
    FOREIGN KEY (idproduct) REFERENCES Product(idproduct )
);

获取您的数据:

SELECT * FROM Product AS P
INNER JOIN Customer AS C ON C.idproduct = P.idproduct
WHERE C.idcustomer = 1

答案 2 :(得分:1)

在mysql中,外键是一种特殊类型的约束。它最好用表格创建,但也可以在之后添加。在这种情况下,您可以将约束定义为:

ALTER TABLE客户     添加外键(idproduct)     参考产品(idproduct);

(注意你必须使用InnoDB引擎来利用mysql中的FK。更多here

但是FK不需要进行JOIN,这就是你在SELECT中链接表的方法 -

select c.idcustomer, c.name, p.nameproduct
from customer c
join Product p on p.idproduct=c.idproduct;