MySQL IN子句不适用于列名'index'

时间:2016-06-06 06:39:05

标签: mysql

我的架构是:

CREATE TABLE `dump` (
  `index` int(20) DEFAULT NULL,
  `uid` int(20) DEFAULT NULL,
  `time` int(20) DEFAULT NULL,
  `delete1` int(20) DEFAULT NULL,
  `delete2` int(20) DEFAULT NULL,
  `delete3` int(20) DEFAULT NULL,
  `delete4` int(20) DEFAULT NULL,
  `delete5` int(20) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

然而,当我运行查询时:

SELECT * FROM dump WHERE 'index' IN ('1', '2', '3');

没有返回任何内容。我100%确定存在具有这些值的索引的条目。如果我从1,2,3等中删除单引号并不重要,但如果从索引中删除则会出现语法错误。

3 个答案:

答案 0 :(得分:0)

不使用保留关键字作为标识符,而是使用一些相关名称。如果您仍想要这样做,请将其包含在反引号(``)

SELECT * FROM dump WHERE `index` IN ('1', '2', '3');

答案 1 :(得分:0)

在MySql中,Index是保留关键字。您不能将保留关键字用作列名。将索引列名称更改为其他名称。还有一些其他的关键字,如插入,选择等。希望它会帮助你。 感谢。

答案 2 :(得分:0)

在MySQL中,某些词语如SELECT, INSERT, DELETE etc。是保留字。由于它们具有特殊含义,因此只要您将它们用作表名,列名或其他类型的标识符,MySQL就会将其视为语法错误 - 除非您使用反引号包围标识符。

有两种方法可以解决这个问题:

<强> 1。请勿使用reserved words作为标识符

<强> 2。使用反引号(如果无法重命名)

因此,基于选项#2

SELECT * FROM dump WHERE `index` IN ('1', '2', '3');