2012-09-26 49 views
2

我有2個表:創建一個表與一對夫婦在MySQL服務器的主鍵

  1. 作者(ID,姓名,加,DOB),其中字段是INTEGER,CHAR(20),CHAR( 20),DATE。主鍵= id。

  2. 其中字段分別爲INTEGER,CHAR(20),CHAR(20)的書籍(出價,標題,出版商)。主鍵=出價。

我想創建一個領域的援助,中標,datePublished,在另一個表寫:

  1. 援助= INTEGER ......這實際上是從作者的ID。
  2. bid = INTEGER ...這實際上是圖書的出價
  3. 主鍵=(援助,出價)。

我該怎麼做?

我嘗試了以下幾行代碼,所有這些都給語法錯誤:

CREATE TABLE Write (
    aid INTEGER, 
    bid INTEGER, datePublished DATE, 
    PRIMARY KEY NONCLUSTERED (aid,bid), 
    FOREIGN KEY (aid) REFERENCES Authors(id), 
    FOREIGN KEY (bid) REFERENCES Books(bid) 
); 

CREATE TABLE Write (
    aid INTEGER, 
    bid INTEGER, 
    datePublished DATE, 
    PRIMARY KEY (aid,bid) 
); 
+1

什麼是你得到實際的錯誤? – Jesse

回答

0

試試這個:你有

CREATE TABLE Write (aid INTEGER, bid INTEGER, datePublished DATE PRIMARY KEY (aid,bid)); 
+0

感謝您的及時回覆Amrish。不幸的是,這也沒有奏效。我嘗試了你的建議,還有你的建議,除了我在DATE之後和PRIMARY KEY之前添加了一個逗號。都沒有工作。 –

+0

我得到一個SQL語法錯誤:( –

+0

您是否已經創建了作者和書籍表?您可以發送這個嗎? –

2

滑稽的問題。原因是Write是mysql中的一個保留關鍵字,如果你在查詢中用反引號括起來,你只能用它作爲標識符。我建議你挑選另一名或者,如果你真的想用Write,與

CREATE TABLE `Write` (
    aid INTEGER, 
    bid INTEGER, 
    datePublished DATE, 
    PRIMARY KEY (aid,bid) 
); 

更換您創建的查詢只記得,在桌子上的任何其他查詢Write將要求反引號爲好,這可能會導致煩人如果有人忘記了這些錯誤。

+0

謝謝埃裏克,你說得對,我會用Writes讓我的生活更輕鬆:) –

1

寫是一個reserved word,沒有表可以命名(它可以使用back tics,但使您的生活容易遠離名稱,需要背部抽搐)。

下面是完整的架構 http://sqlfiddle.com/#!2/dfe22/1

+0

this是錯誤的,看到我的答案和這個sqlfiddle http://sqlfiddle.com/#!2/f2ecd – Erik

+0

你是對的。這可能與後面的勾號。就我個人而言,我認爲這是一個糟糕的黑客攻擊,並且從不使用需要反抽的名字。 –

+0

+1「遠離反引號」 –