2008-08-08 172 views
13

我有一張表,應該跟蹤天和產品從一個供應商運送到另一個的成本。我們(出色地說:p)在「供應商」表中將產品處理供應商(Think ... Dunder Mifflin)與運輸供應商(FedEx,UPS)存儲在一起。所以,我的SHIPPING_DETAILS表中有三列都引用了VENDOR.no。由於某些原因,MySQL不會讓我將所有三個定義爲外鍵。有任何想法嗎?多個外鍵?

CREATE TABLE SHIPPING_GRID( 
    id INT NOT NULL AUTO_INCREMENT PRIMARY KEY COMMENT 'Unique ID for each row', 
    shipping_vendor_no INT(6) NOT NULL COMMENT 'Foreign key to VENDOR.no for the shipping vendor (vendors_type must be 3)', 
    start_vendor_no INT(6) NOT NULL COMMENT 'Foreign key to VENDOR.no for the vendor being shipped from', 
    end_vendor_no INT(6) NOT NULL COMMENT 'Foreign key to the VENDOR.no for the vendor being shipped to', 
    shipment_duration INT(1) DEFAULT 1 COMMENT 'Duration in whole days shipment will take', 
    price FLOAT(5,5) NOT NULL COMMENT 'Price in US dollars per shipment lbs (down to 5 decimal places)', 
    is_flat_rate TINYINT(1) DEFAULT 0 COMMENT '1 if is flat rate regardless of weight, 0 if price is by lbs', 
    INDEX (shipping_vendor_no), 
    INDEX (start_vendor_no), 
    INDEX (end_vendor_no), 
    FOREIGN KEY (shipping_vendor_no) REFERENCES VENDOR (no), 
    FOREIGN KEY (start_vendor_no) REFERENCES VENDOR (no), 
    FOREIGN KEY (end_vendor_no) REFERENCES VENDOR (no) 
) TYPE = INNODB; 

修改,以去除雙主鍵定義...


是啊,可惜就是沒有解決它雖然。現在我越來越:

無法創建表 './ 打消了我的DB名稱 /SHIPPING_GRID.frm' (錯誤:150)

做一個phpinfo()函數告訴我這個對MySQL:

客戶端API版本5.0.45

是的,VENDOR.no是類型int(6)。

+0

事實上,錯誤? 150引用[外鍵約束](http://dev.mysql.com/doc/refman/5.0/en/innodb-foreign-key-constraints.html)錯誤。你能提供VENDOR表的定義嗎?供應商的PK是INT(6)還是INT?從上面的頁面: - *整數類型的大小和符號必須相同。* – 2008-08-08 20:35:00

回答

8

您定義了兩次主鍵。嘗試:

CREATE TABLE SHIPPING_GRID( 
    id INT NOT NULL AUTO_INCREMENT PRIMARY KEY COMMENT 'Unique ID for each row', 
    shipping_vendor_no INT(6) NOT NULL COMMENT 'Foreign key to VENDOR.no for the shipping vendor (vendors_type must be 3)', 
    start_vendor_no INT(6) NOT NULL COMMENT 'Foreign key to VENDOR.no for the vendor being shipped from', 
    end_vendor_no INT(6) NOT NULL COMMENT 'Foreign key to the VENDOR.no for the vendor being shipped to', 
    shipment_duration INT(1) DEFAULT 1 COMMENT 'Duration in whole days shipment will take', 
    price FLOAT(5,5) NOT NULL COMMENT 'Price in US dollars per shipment lbs (down to 5 decimal places)', 
    is_flat_rate TINYINT(1) DEFAULT 0 COMMENT '1 if is flat rate regardless of weight, 0 if price is by lbs', 
    INDEX (shipping_vendor_no), 
    INDEX (start_vendor_no), 
    INDEX (end_vendor_no), 
    FOREIGN KEY (shipping_vendor_no) REFERENCES VENDOR (no), 
    FOREIGN KEY (start_vendor_no) REFERENCES VENDOR (no), 
    FOREIGN KEY (end_vendor_no) REFERENCES VENDOR (no) 
) TYPE = INNODB; 

VENDOR主鍵必須是INT(6),並且這兩個表必須是InnoDB類型。

0

我在這裏運行代碼,並顯示錯誤消息(它是正確的!),您設置ID字段兩次作爲主鍵。

0

你能提供 賣方表

我理解了它的定義。供應商表是MyISAM的...(編輯你的答案告訴我,使他們既INNODB;))

(任何原因只是開關供應商類型超過InnoDB的)