2013-01-12 23 views
2

我寫的MySQL以下查詢:我的MySQL查詢出了什麼問題?

mysql> Create table R_Matrix 
     ( 
     image_name VARCHAR(25) NOT NULL REFERENCES Images(image_name), 
     Row INT, 
     Column INT, 
     Data INT, 
     PRIMARY KEY(image_name) 
     ); 

如果照片是在同一個數據庫中的表和IMAGE_NAME是在其列;

不過,我得到了以下錯誤:

ERROR 1064(42000):你在你的SQL語法錯誤;檢查對應於你的MySQL服務器版本的權利 語法使用近「列INT,數據INT,PRIMARY KEY(IMAGE_NAME))」 在1號線

我找不到什麼毛病的 手冊查詢。我究竟做錯了什麼 ?

回答

5

COLUMN是保留關鍵字。它必須是逃避反引號使用,

Create table R_Matrix 
( 
    image_name VARCHAR(25) NOT NULL REFERENCES Images(image_name), 
    Row INT, 
    `Column` INT, 
    Data INT, 
    PRIMARY KEY(image_name) 
); 
+0

愚蠢的我,謝謝! – Chani

+0

不客氣! ':D' –

+6

我不會建議使用ANSI SQL保留字作爲列名稱,即使是封閉在反標記中。 – Perception

3

最好的辦法是避免使用MySQL的保留字作爲標識符。由於您正在運行CREATE TABLE語句,因此更改列名稱是最佳解決方案。 (選擇不同的列名;或者至少在標識符的末尾添加一個下劃線。)

您的聲明的問題(正如JW正確指出的那樣)是COLUMN是MySQL保留字。您的陳述引發錯誤,因爲MySQL在您的陳述中將標記Column解釋爲保留字而不是列名;在這種情況下,保留字是有效的語法。

解決方法(如JW也指出的)防止MySQL將標識符視爲保留字是將標識符用反引號括起來;或者,如果sql_mode設置爲ANSI,則標識符可以用雙引號引起來。