在这里阅读了几个关于SQL问题的答案和评论之后,还听到我的一个朋友在一个禁止他们的政策的地方工作,我想知道在场地周围使用反引号是否有什么问题MySQL中的名字。
那是:
SELECT `id`, `name`, `anotherfield` ...
-- vs --
SELECT id, name, anotherfield ...
答案 0 :(得分:150)
使用反引号允许您使用替代字符。在查询编写中它不是一个问题,但如果假设你可以使用反引号,我会认为它可以让你逃脱像
这样荒谬的东西SELECT `id`, `my name`, `another field` , `field,with,comma`
当然,这会产生名称严重的表格。
如果你只是简明扼要我没有看到它的问题, 如果你这样运行你的查询,你会注意到
EXPLAIN EXTENDED Select foo,bar,baz
生成的警告会返回和完全限定的表名。因此,如果您正在使用查询生成功能和自动重写查询,反引号会使解析代码的任何事情变得更加困惑。
然而,我认为,不是强制你是否可以使用反引号,而是应该有一个名称标准。它解决了更多“真正的”问题。
答案 1 :(得分:56)
反引号的唯一问题是它们不符合ANSI-SQL,例如它们在SQL Server中不起作用。
如果有可能将SQL移植到另一个数据库,请使用双引号。
答案 2 :(得分:44)
对我而言,在处理字段名称时始终使用它们是非常有意义的。
答案 3 :(得分:25)
反引号不是标准ANSI SQL的一部分。来自the mysql manual:
如果是ANSI_QUOTES SQL模式 启用后,也可以引用 双引号内的标识符
因此,如果您使用反引号然后决定退出MySQL,则会遇到问题(尽管您可能还有更大的问题)
答案 4 :(得分:8)
如果你继续使用MYSQL没有任何错误,除了查询的视觉效果。但它们允许使用保留关键字或嵌入空格作为表和列名称。对于大多数数据库引擎来说,这是禁忌,并且会阻止以后的任何迁移。
至于易于阅读,许多人对SQL关键字使用上限,例如
SELECT some_fied, some_other_field FROM whatever WHERE id IS NULL;
答案 5 :(得分:6)
如果你问我,应该一直使用反引号。但是有一些原因可能导致团队不愿意使用它们。
优点:
缺点:
答案 6 :(得分:4)
嗯,据我所知,使用反引号的全部目的是让你可以使用与保留关键字一致的名称。因此,如果名称没有与保留关键字冲突,我认为没有任何理由使用反引号。但是,也没有理由禁止它们。
答案 7 :(得分:4)
在反向搜索中搜索代码库要容易得多。假设您有一个名为event
的表。 grep -r "event" *
可能会返回数百个结果。 grep -r "\`event\`" *
将返回可能引用您的数据库的任何内容。
答案 8 :(得分:2)
关于反引号的简单事情``用于表示像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..
答案 9 :(得分:0)
如果您使用某些字段名称作为默认mysql或mssql值(例如“status”),则必须使用反引号(“从table_name中选择status
”或“从table_name中选择id status
= 1“)。
因为mysql返回错误或者查询不起作用。
答案 10 :(得分:0)
SQL中反引号(`)的主要用法是在您将在即将到来的子句中再次调用它们的情况下使用它们。建议每隔两次使用双引号(“”)。
例如
u_salary
在上面的语句中,您看到如何在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
仅在出现这种情况时,使用反引号才有用。在所有其他情况下,建议使用双引号。