我用反引号构建MYSQL查询。例如,
SELECT `title` FROM `table` WHERE (`id` = 3)
而不是:
SELECT title FROM table WHERE (id = 3)
我想我从Phpmyadmin导出中得到了这种做法,根据我的理解,甚至Rails都会生成这样的查询。
但是现在我看到越来越少的查询构建得像这样,而且,在查询中使用反引号代码看起来更加混乱和复杂。即使使用SQL辅助函数,没有它们也会更简单。因此,我正考虑将它们抛在后面。
我想知道在这种做法中是否还有其他含义,例如SQL(我的情况下是MySQL)解释速度等等。你怎么看?
答案 0 :(得分:21)
反引号还允许表/列名称中的空格和其他特殊字符(显然除了反引号)。它们不是绝对必要的,但对安全是一个好主意。
如果您遵循合理的命名表和列的规则,则不必使用反引号。
答案 1 :(得分:16)
每当我看到这个讨论时,我都试图游说他们的包含,因为,好吧,答案已经隐藏在这里了,尽管没有进一步思考,但是狡猾地眨了眨眼。当我们错误地使用关键字作为字段或表名时,我们可以通过各种方法避免混淆,但只有敏锐地意识到反向勾号才能带来更大的好处!!!
sql语句中的每个单词都在整个关键字哈希表中运行,以查看是否存在冲突,因此,您已经通过告诉编译器嘿,我知道自己在做什么来为您查询了一个大忙不需要检查这些单词,因为它们代表表和字段名称。速度和优雅。
干杯, 布拉德
答案 2 :(得分:3)
反引号用于转义mysql查询中的保留关键字,例如:你希望有一个count
列 - 不是那么罕见。
您可以在列/表/数据库名称中使用其他特殊字符或空格
它们不会让您免受注入攻击(如果您允许用户以某种方式输入列名 - 无论如何都是不好的做法)
它们不是标准化的sql,只能在mysql中工作;其他dbms将使用"
代替
答案 3 :(得分:2)
好吧,如果您确保不会意外地使用关键字作为标识符,则不需要反引号。 : - )
答案 4 :(得分:1)
我认为反引号主要用于防止使用常见SQL标识符的错误查询,即LIMIT和COUNT。