我为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行
我发现查询没有任何问题。我究竟做错了什么 ?
答案 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,则标识符可以用双引号括起来。