题
阅读后几个答复和评论意见一些SQL的问题在这里,并且也听到这我有一位朋友在一个地方,有一项政策禁止他们,我不知道是否有什么反引号,使用周围的领域中的名称MySQL.
这是:
SELECT `id`, `name`, `anotherfield` ...
-- vs --
SELECT id, name, anotherfield ...
解决方案
使用反引号允许您使用替代字符。在查询编写中它不是一个问题,但如果假设你可以使用反引号,我会认为它可以让你逃脱像
这样荒谬的东西SELECT `id`, `my name`, `another field` , `field,with,comma`
当然,这会产生名称严重的表格。
如果你只是简明扼要我没有看到它的问题, 如果你这样运行你的查询,你会注意到
EXPLAIN EXTENDED Select foo,bar,baz
生成的警告会返回和完全限定的表名。因此,如果您正在使用查询生成功能和自动重写查询,反引号会使解析代码的任何事情变得更加困惑。
然而,我认为,不是强制你是否可以使用反引号,而是应该有一个名称标准。它解决了更多“真正的”问题。
其他提示
反引号的唯一问题是它们不符合ANSI-SQL,例如它们在SQL Server中不起作用。
如果有可能将SQL移植到另一个数据库,请使用双引号。
对我来说它有很大的意义,以利用他们在任何时候当处理领域的名称。
- 首先,一旦你进入习惯,它不会伤害到的只是打反引号的关键。
- 其次,对我来说,这使它更容易看到的到底是什么字段的查询,以及什么是关键字或方法。
- 最后,它允许使用任何领域的姓名,你希望当你设计的表格。有时,它很有意义的名字一个字段的"钥匙","秩序"、或"价值观"...所有这些都需要反引号的时候提到他们。
反引号不是标准ANSI SQL的一部分。从 mysql手册:
如果是ANSI_QUOTES SQL模式 启用后,也可以引用 双引号内的标识符
因此,如果您使用反引号然后决定退出MySQL,则会遇到问题(尽管您可能还有更大的问题)
如果你继续使用MYSQL没有任何错误,除了查询的视觉效果。但它们允许使用保留关键字或嵌入空格作为表和列名称。对于大多数数据库引擎来说,这是禁忌,并且会阻止以后的任何迁移。
至于易于阅读,许多人对SQL关键字使用上限,例如
SELECT some_fied, some_other_field FROM whatever WHERE id IS NULL;
如果你问我,反引号应该总是可以使用的。但是有一些原因为什么一个团队可能不愿意使用它们。
优点:
- 使用它们,没有保留的话或被禁止的字符。
- 在某些情况下,可获得更多的描述性的错误信息。
- 如果你避免的不良做法你不在乎,但是...在实字,有时他们是一个体面的方式,以避免SQL注射。
缺点:
- 他们不是标准通常不便携式。然而,只要你不用一个反引号的一部分的标识符(这是最糟糕的做法,我能够想象),可以口查询,通过自动删除反引号。
- 如果你的一些查询来自访问,他们可以引述表格的名称与"(也许你不能删除所有"盲目).然而,混合的反引号和双引号是允许的。
- 一些愚蠢的软件或功能的过滤器您的查询,并有问题,反引号。然而,他们的一部分ASCII因此,这意味着你的软件/职能是非常糟糕。
嗯,据我所知,使用反引号的全部目的是让你可以使用与保留关键字一致的名称。因此,如果名称没有与保留关键字冲突,我认为没有任何理由使用反引号。但是,也没有理由禁止它们。
在反向搜索中搜索代码库要容易得多。假设您有一个名为 event
的表。 grep -r" event" *
可能会返回数百个结果。 grep -r" \`event \`" *
将返回可能引用您的数据库的任何内容。
关于反引号的简单事情``用于表示像database_name,table_name等标识符,单引号'',双引号"" 用于字符串文字,而“"”按原样使用打印值并''打印值变量hold或在另一种情况下打印他的文本。
i.e 1.-> use `model`;
here `model` is database name not conflict with reserve keyword 'model'
2- $age = 27;
insert into `tbl_people`(`name`,`age`,`address`) values ('Ashoka','$age',"Delhi");
here i used both quote for all type of requirement. If anything not clear let me know..
如果您使用某些字段名称作为默认mysql或mssql值(例如“status”),则必须使用反引号(“从表名”中选择 status
或从table_name中选择id)其中 status
= 1")。
因为mysql返回错误或者查询不起作用。
SQL中反引号(`)的主要用途是在你将要在即将到来的子句中再次调用它们的情况下使用它们。在每隔一段时间,建议使用双引号(“"”)。
例如
SELECT CONCAT(Name, ' in ', city, ', ', statecode) AS `Publisher and Location`,
COUNT(ISBN) AS "# Books",
MAX(LENGTH(title)) AS "Longest Title",
MIN(LENGTH(title)) AS "Shortest Title"
FROM Publisher JOIN Book
ON Publisher.PublisherID = Book.PublisherID WHERE INSTR(name, 'read')>0
GROUP BY `Publisher and Location`
HAVING COUNT(ISBN) > 1;
在上面的陈述中,您了解 GROUP BY
子句中如何再次使用 Publisher和Location
。
而不是使用
GROUP BY名称,城市,州代码
我刚用过
GROUP BY
发布者和位置
只有在出现这种情况时,才能使用反引号。在所有其他时候,建议使用双引号。