2013-07-19 50 views
0

我無法在phpmyadmin中創建外鍵。 我用下面的查詢來創建2個創建桌子。第一個表,但是當我使用第二個查詢我得到了錯誤的使用phpmyadmin的mysql外鍵

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'order (Orderid INT NOT NULL, cost INT, CustId INT NOT NULL, PRIMARY KEY(Or' at line 1 

這是我的第一個表:

CREATE TABLE customer 
(
    CustId INT NOT NULL, 
    first_name VARCHAR(30), 
    PRIMARY KEY (CustId) 
); 

,這是我的第二個表:

CREATE TABLE order 
(
Orderid INT NOT NULL, 
cost INT, 
CustId INT NOT NULL, 
PRIMARY KEY(Orderid), 
INDEX (CustId), 
FOREIGN KEY (CustId) REFERENCES customer (CustId) 
); 

所以我在做什麼錯在這裏?我如何創建這個表,並在phpmyadmin中實現外鍵。

+2

我想'order'保留關鍵字在MySQL所以嘗試一些其他的名字,如'orders'或把報價在你的表名作爲''order'' – Lekhnath

+0

的這個標題問題應該改變。表定義包含外鍵約束這一事實根本不相關。 – spencer7593

回答

1

order是一個MySQL的保留字(它在ORDER BY子句中使用),你必須把它們放在反引號,如果你想使用它作爲一個表或列的名稱。

CREATE TABLE `order` 
(
Orderid INT NOT NULL, 
cost INT, 
CustId INT NOT NULL, 
PRIMARY KEY(Orderid), 
INDEX (CustId), 
FOREIGN KEY (CustId) REFERENCES customer (CustId) 
); 

當你在查詢中引用它時,你必須記得反引號。如果您爲表格簡單地選擇不同的名稱,您將節省很多麻煩。

+0

謝謝你解決了這個問題。 – user1788048

+1

我不知道爲什麼你認爲這個問題有一些東西需要與外鍵的時候很清楚的錯誤消息說,這是近'order'語法錯誤。 – Barmar

+0

@Barmar:這可能對於遇到同樣的問題在未來人的利益。他們將能夠通過搜索「使用phpmyadmin的mysql外鍵」輕鬆找到此問題。 :) – spencer7593

0

此外,這將幫助你:

如果你問我,反引號總是應該使用。但是爲什麼一個團隊可能不想使用它們有一些原因。

優點:

  • 使用它們,有沒有保留字或禁止字符。
  • 在某些情況下,您會收到更多描述性錯誤消息。
  • 如果你避免不好的做法,你不會在乎,但是......實際上, 有時它們是避免SQL注入的體面方式。

缺點:

  • 它們不是標準,通常不便於攜帶。但是,只要 您不使用反引號作爲標識符的一部分(這是我能夠想象得出的最糟糕的 實踐),那麼您可以通過自動移除反引號將您的查詢移植到 。
  • 如果你的一些查詢來自Access,他們可能會引用表名 與「(也許你不能刪除所有的」盲目「)。但是,允許使用反引號和雙引號的組合。
  • 一些愚蠢的軟件或功能過濾您的查詢,並有 反向問題。然而,它們是ASCII的一部分,所以這個 意味着你的軟件/功能非常糟糕。

參見:http://dev.mysql.com/doc/refman/5.0/en/identifiers.html