在字段名称周围使用反引号


172

在阅读了一些有关SQL问题的答案和评论,并听到我的一个朋友在一个禁止他们使用的政策的地方工作之后,我想知道在MySQL的字段名周围使用反引号是否有问题。

那是:

SELECT `id`, `name`, `anotherfield` ...
-- vs --
SELECT id, name, anotherfield ...

23
如果您想使用诸如,或类似的列名count,反引号非常方便typetable
knittl


@knittl我认为这个问题是,应该你有一个像列名counttypetable。这些术语非常模棱两可,在几乎每种情况下,这些名称都可以改进为更具体。给列命名这样的事情也是危险的,并且是潜在的错误源,因为您永远不知道何时有人会忘记添加反引号或没有意识到他们必须这样做。我认为最好避免使用保留术语作为列名。
达林

我总是使用它们,因此在任何时候都使用保留关键字不会有危险。
马库斯·泽勒

Answers:


153

使用反引号允许您使用其他字符。在查询编写中,这不是问题,但是如果假设您可以使用反引号,那么我认为它可以让您摆脱诸如

SELECT `id`, `my name`, `another field` , `field,with,comma` 

当然哪个会生成命名错误的表。

如果您只是为了简洁起见,但我没有发现任何问题,则请注意是否以这种方式运行查询

EXPLAIN EXTENDED Select foo,bar,baz 

返回的生成警告将带有反引号完全限定的表名。因此,如果您使用查询生成功能和自动重写查询,则反引号会使解析您的代码的任何事情都变得不那么混乱。

但是我认为,与其强制要求您是否可以使用反引号,不如说它们应该有一个名称标准。它解决了更多的“实际”问题。


我们还需要在PostgreSQL中使用它们吗?
Yousuf Memon 2013年

5
没有必要,只有建议。如果将来添加与您的字段名称共享的SQL关键字,则用引号表示它们很有用,以避免与SQL关键字产生歧义。例如,您唯一需要引用的字段共享一个关键字名称的字段,而select count from foovs select "count" from foo则会给出截然不同的结果。但是postgres在2个方面与mysql不同:1.字段用引起来""。2.不带引号的字段不区分大小写postgresql.org/docs/current/static / ...
Kent Fredric 2014年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.