2011-05-24 57 views
1

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

例子:

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

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

我如何可以链接在一起,就像为外键系统中的两个,当我选择一个客户,我可以得到他所有的产品?这是关于数据库结构的问题。

回答

1

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

ALTER TABLE customer ADD FOREIGN KEY(idproduct) REFERENCES Product(idproduct);

(请注意,您必须使用InnoDB引擎利用FK的在MySQL的更多here

然而FK的不需要做加盟,这是你将如何在选择链接表 -

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

您想引入第三张表来解决客户和产品之间的多对多关系。它应该由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 
+0

我知道,这只是一个纯粹的例子,我只是想加入该表,当我选择一个客户,我可以把他的产品 – ThorDozer 2011-05-24 21:47:58

1

这里是你如何做一个外键约束(忽略乔正确地指出的基数问题):

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 
+0

,当我如做一个选择:从产品选择nameProduct。 ,客户WHERE idcustomer = 1 AND product.idproduct = customer.id产品 它会工作? – ThorDozer 2011-05-24 21:51:23