我的MySQL查询有什么问题?

时间:2013-01-12 16:25:25

标签: mysql sql

我为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) 
       ); 

其中Images是同一数据库中的表,image_name是其中的一列;

但是我收到以下错误:

  

错误1064(42000):您的SQL语法有错误;检查   手册,对应右边的MySQL服务器版本   在'列INT,数据INT,PRIMARY KEY(image_name)'附近使用的语法'   在第1行

我发现查询没有任何问题。我究竟做错了什么 ?

2 个答案:

答案 0 :(得分: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) 
);

答案 1 :(得分:3)

最好的选择是避免使用MySQL保留字作为标识符。由于您运行的是CREATE TABLE语句,因此更改列名称是最佳解决方案。 (选择不同的列名;或者至少在标识符的末尾添加下划线。)

您的语句问题(正如JW正确指出的那样)是COLUMN是MySQL保留字。您的语句引发错误,因为MySQL将语句中的标记Column解释为保留字而不是列名;并且,在该上下文中,该保留字是有效的语法。

一种解决方法(正如JW所指出的),以防止MySQL将标识符视为保留字,将标识符包含在反引号中;或者,如果sql_mode设置为ANSI,则标识符可以用双引号括起来。