2

我为 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 是其中的一个列;

但是我收到以下错误:

ERROR 1064 (42000):您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 1 行的“Column INT, Data INT, PRIMARY KEY(image_name))”附近使用正确的语法

我找不到查询有什么问题。我究竟做错了什么 ?

4

2 回答 2

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) 
);
于 2013-01-12T16:26:18.873 回答
3

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

您的陈述的问题(正如 JW 正确指出的那样)是COLUMNMySQL 保留字。您的语句引发错误,因为 MySQLColumn将语句中的标记解释为保留字,而不是列名;并且,在这种情况下,该保留字是有效的语法。

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

于 2013-01-12T22:48:19.617 回答