由于某些原因,我现在工作的新公司的开发人员决定将他们的列命名为“ignore”和“exists”。现在当我在MySQL查询中使用这些单词作为where子句时,会出现语法错误;然而,我似乎无法找到如何引用这些列而不会遇到错误的方法。我尝试将它们设置为字符串,但那没有任何意义。
有什么帮助吗?
此外,这种不匹配是否有一个术语?
有什么帮助吗?
此外,这种不匹配是否有一个术语?
将名称用反引号括起来:
`ignore`, `exists`
如果您需要跨多个表或数据库工作,则需要分别转义数据库名称、表名称和字段名称(如果每个名称都与关键字匹配):
SELECT * FROM `db1`.`table1`
LEFT JOIN `db2`.`table2` on `db1`.`table1`.`field1`=`db2`.`table2`.`field2`
只有与关键字实际匹配的部分需要进行转义,所以例如:
select * from `db1`.table
也可以。
`ignore`
如果可能的话,我会认真考虑更改名称。反引号不是标准的SQL语法,而且我更喜欢列名更具表达性。例如,ignoreThisUser
或orderExists
(我尝试遵循的一般规则是在其中有一个名词和一个动词)。
有趣的是,一些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