选择一个也是MySQL中关键字的列

时间:2010-10-22 02:27:13

标签: mysql keyword

出于某种原因,我正在工作的新公司的开发人员决定将他们的列命名为“忽略”和“存在”。现在,当我在where子句中使用这些单词运行MySQL查询时,出现语法错误;但是,我似乎无法弄清楚如何引用这些列而不会遇到错误。我尝试将它们设置为字符串,但这没有任何意义。

帮助?

此外,是否存在这种不匹配的术语?

2 个答案:

答案 0 :(得分:11)

将名字放在反引号中:

`ignore`, `exists`

如果您正在跨多个表或数据库工作,则需要分别转义数据库名称,表名和字段名(如果每个匹配关键字):

SELECT * FROM `db1`.`table1`
LEFT JOIN `db2`.`table2` on `db1`.`table1`.`field1`=`db2`.`table2`.`field2`

只有与关键字实际匹配的部分才必须进行转义,例如:

select * from `db1`.table

也可以。

答案 1 :(得分:4)

官方用语是“白痴”:-)你可以在名字上加上反引号,如

`ignore`

但如果可能,我会认真考虑更改名称。反引号不是标准的SQL,我更喜欢我的列名更具表现力。例如,ignoreThisUserorderExists(我尝试遵循的一般规则是在某处有名词和动词)。

有趣的是,某些DBMS可能会发现不会将其视为基于上下文的保留字。例如,DB2 / z允许相当可怕的:

> CREATE TABLE SELECT ( SELECT VARCHAR(10) );
> INSERT INTO SELECT VALUES ('HELLO');
> SELECT SELECT FROM SELECT;
SELECT
---------+---------+---------+--------
HELLO
DSNE610I NUMBER OF ROWS DISPLAYED IS 1