2011-05-24 56 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