2013-10-18 103 views
-2

我對這個站點和數據庫都是新手。我正在爲公司的銷售點創建數據庫。有問題,因爲林我有這麼多的複合主鍵好了,所以這裏是我的問題...我有臺件:在嘗試使用複合鍵時在MySQL中獲取errno:150

DROP TABLE IF EXISTS member; 
CREATE TABLE member (
    fName     varchar(10)  NOT NULL, 
    lname     varchar(10)  NOT NULL, 
    shippingAddress   varchar(50)  NOT NULL, 
    billingAddress   varchar(50)  NOT NULL, 
    memberNo    varchar(15)  NOT NULL, 
    memStartDate   date    NOT NULL, 
    memOf     varchar(15)  , 
    PRIMARY KEY(memberNo, shippingAddress) 
); 
and table shipping: 

DROP TABLE IF EXISTS shipping; 
CREATE TABLE shipping (
     company   varchar(10) NOT NULL, 
     warehouseAddress varchar(50) NOT NULL, 
     memberAddress  varchar(50) NOT NULL, 
     memberNum   varchar(15) NOT NULL, 
     orderNumber  varchar(20) NOT NULL, 
     PRIMARY KEY(orderNumber) 
); 

ALTER TABLE shipping ADD CONSTRAINT shipping_memberAddnNUM_refs_member_memberNoNshippingAddress FOREIGN KEY (memberAddress, memberNum) 
     REFERENCES member (shippingAddress, memberNo); 

所以它給了我一個錯誤號:150

我不必然需要成員(shippingAddress)作爲主鍵的一部分。但我確實需要參考我的運輸表。有誰知道如何克服這個問題我一直在看網上的例子,但他們都沒有解決這個問題。

+3

你需要花一些時間瀏覽網站,看看它是如何工作的。其他人是否將他們的標題張貼在所有封面中?你看到每個人如何將他們的代碼放在灰色塊中? (縮進4個空格)。 –

+0

創建外鍵需要滿足幾個條件。 – hjpotter92

+1

關鍵是'(memberNo,shippingAddress)'所以保持外鍵的順序也是 –

回答

0

我不喜歡這樣寫道:

CONSTRAINT  NAME_OF_PK  PRIMARY KEY(Field1, Field2) 

但是,這是做事的微軟SQL的方式。

0

你必須按相反的順序兩列 - 從他們如何出現在memberPRIMARY KEY。試試這個:

ALTER TABLE shipping 
    ADD CONSTRAINT shipping_memberAddnNUM_refs_member_memberNoNshippingAddress 
    FOREIGN KEY (memberNum, memberAddress) 
    REFERENCES member (memberNo, shippingAddress);