2012-12-05 99 views
0

我一直在試圖建立一個表的外鍵指一個價格表,這是語法我到目前爲止,創建錯誤,我該如何解決這個語法才能使它工作?

CREATE TABLE shirts(
     shirt_id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY, 
     shirt_name VARCHAR(100) NOT NULL, 
     shirt_type VARCHAR(10) NOT NULL, 
     shirt_size VARCHAR(20) NOT NULL, 
     qp_price NUMERIC(6,2) FOREIGN KEY REFERENCES price_list.price ON price_list.price_id=shirts.qp_price NOT NULL, 
     o_price NUMERIC(6,2) FOREIGN KEY REFERENCES price_list.price ON price_list.price_id=shirts.o_price NOT NULL, 
     clr_options VARCHAR(30) NULL, 
     qty NUMERIC(5,0) NULL 
    )ENGINE=INNODB 

的「價格表」有3列,這是price_id,price_cat和價格。我想要襯衫表中的qp_price和o_price列是根據我在襯衫表上列出的數字顯示price_list表的價格列。例如,

,如果我做

INSERT INTO shirts(shirt_name,shirt_type,shirt_size,qp_price,o_price)VALUES 
     ('Crewneck Tee','Men','S','1','2'), 
     ('Crewneck Tee','Men','M','1','2'), 
     ('Crewneck Tee','Men','L','1','2'), 
     ('Crewneck Tee','Men','1X','1','2'), 
     ('Crewneck Tee','Men','2X','3','4'), 
     ('Crewneck Tee','Men','3X','5','6'), 
     ('Crewneck Tee','Men','4X','7','8'), 
     ('Crewneck Tee','Men','5X','9','10') 

的SL圓領T恤將顯示在第一和價格列的第2行,因爲它鏈接到price_id列在表PRICE_LIST價格...我怎樣才能做到這一點?

+1

'o_price NUMERIC(6,2)FOREIGN KEY REFERENCE'是否是發佈時的錯字或是從代碼中剪切並粘貼的?它應該是參考。 – JamieSee

+0

它是從我的代碼複製...所以這是一個錯字,我糾正它,但它仍然失敗:(..大聲笑 – Optiq

回答

1

CREATE TABLE statmenet中的ON FOREIGN KEY REFERENCES子句不是連接,它的意思是指定行爲,如ON UPDATE CASCADE ON DELETE RESTRICT。

另外,我發現關於MySQL 5.1中此評論在14.6.4.4. FOREIGN KEY Constraints

確保您分別表1和表2索引表1與表2的引用列 。如果你沒有,錯誤「#1005 - 無法創建表」前景「(錯誤號:105)」將被標記。 (索引 是很好的做法,因爲它避免全表掃描!)一旦被採取 照顧和被引用的列是相同的數據類型,你會 已成功創建所需的表與儘可能多的FKS,你 想在上面。

CREATE TABLE shirts(
    shirt_id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY, 
    shirt_name VARCHAR(100) NOT NULL, 
    shirt_type VARCHAR(10) NOT NULL, 
    shirt_size VARCHAR(20) NOT NULL, 
    qp_price NUMERIC(6,2) NOT NULL, 
    o_price NUMERIC(6,2) NOT NULL, 
    clr_options VARCHAR(30) NULL, 
    qty NUMERIC(5,0) NULL 
    INDEX (qp_price), 
    INDEX (o_price), 
    FOREIGN KEY (qp_price) REFERENCES price_list(price_id), 
    FOREIGN KEY (o_price) REFERENCES price_list(price_id), 
)ENGINE=INNODB 

僅供參考,http://www.dpriver.com/pp/sqlformat.htm是當你不碰巧有一個特定的數據庫環境中站了起來非常有用。

+0

我想知道如果這將能夠工作或不,但我只是試過這段代碼,仍然得到一個錯誤。hmmmmm .... – Optiq

+0

糟糕。修正了語法,外鍵引用實際上是來自列聲明的單獨語句,需要有列名並用逗號來抵消。 – JamieSee

+0

我試過了,得到一個errno: 150消息。我甚至改變了它周圍的這一點,門檻得到同樣的事情 CREATE TABLE襯衫( \t \t shirt_id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY NOT NULL, \t \t shirt_name VARCHAR(100)NOT NULL, \t \t shirt_type VARCHAR(10) NOT NULL, \t \t shirt_size VARCHAR(20)NOT NULL, \t \t qp_price NUMERIC(6,2)NOT NULL, \t \t o_price NUMERIC(6,2)NOT NULL, \t \t clr_optio納秒VARCHAR(30)NULL, \t \t數量NUMERIC(5,0)NULL, \t \t \t外鍵(qp_price)參考PRICE_LIST(price_id) \t \t \t外鍵(o_price)參考PRICE_LIST(price_id) \t \t)ENGINE = INNODB – Optiq

相關問題