在阅读了一些关于这里的一些 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;
如果你问我,应该总是使用反引号。但是有一些原因可能会导致团队不愿意使用它们。
好处:
缺点:
在您的代码库中搜索反引号中的内容要容易得多。假设您有一个名为event
. grep -r "event" *
可能会返回数百个结果。grep -r "\`event\`" *
将返回任何可能引用您的数据库的内容。
好吧,据我所知,使用反引号的全部目的是让您可以使用与保留关键字一致的名称。因此,如果名称没有与保留关键字冲突,我看不出有任何理由使用反引号。但是,这也不是禁止它们的理由。
关于反引号的简单事情``用于表示标识符,如 database_name,table_name 等,单引号'',双引号""用于字符串文字,而 "" 用于按原样打印值,'' 打印值变量保持或在另一种情况下,打印他的文字。
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”,则必须使用反引号(“select status
from table_name”或“select id from table_name where 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;
在上面的语句中,您是否看到如何Publisher and Location
在GROUP BY
子句中再次使用 is。
而不是使用
按名称、城市、州代码分组
我刚用
通过...分组
Publisher and Location
只有当这种情况出现时,使用反引号才有用。建议在所有其他时间使用双引号。