您是否应该在查询中使用系统标识符的引号?

时间:2013-01-02 16:27:33

标签: sql

它可能取决于数据库类型,但有偏好(由数据库而不是编码器)或使用引号更好吗?是吗:

  • 更快?
  • 不易出错?
  • 是否有助于预防注射(如果使用PDO)?

假设没有任何需要使用的东西(空格,保留字等)。

MySQL的:

SELECT `id` FROM `table` WHERE `name` = '$name';

ANSI:

SELECT "id" FROM "table" WHERE "name" = '$name';

VS

SELECT id FROM table WHERE name = $name;

这个answer讨论了在MySQL中使用引号的要求,但是我对数据库不需要它的时候感兴趣,但它可能是优先/更好的方面(也许更多)我上面列出的。

4 个答案:

答案 0 :(得分:4)

标识符周围的引号仅在查询解析阶段使用 - 这是一个遍历SQL语句的阶段,并计算出其语法元素。与其他阶段(查询优化,查询执行以及将结果传递回调用者)相比,解析阶段相对较短。因此,无论您的特定RDBMS如何,您都不应期望使用标识符周围的引号进行任何可测量的加速或减速。

就或多或少容易出错而言,在开发阶段很快就会忽略多部分标识符的引号,所以在任何地方放置引号的做法都不值得麻烦,因为对人类的可读性会受到很大影响。

最后,在标识符周围添加引号不会帮助您防止注入攻击;同样适用于在所有标识符周围放置引号。如果标识符是多部分的话,许多SQL脚本生成器采用这种方法来避免遍历脚本测试的if语句。

引用所有标识符的唯一情况是一个好主意是当您以编程方式生成SQL时,结果是而不是供人类读者使用。

答案 1 :(得分:3)

我不喜欢使用带引号的标识符。它们打字时间太长,而且它们使代码混乱,使人类更难阅读。

另外,我更喜欢不鼓励在SQL中使用保留字作为标识符。对我来说,这只是一种很好的做法。我的意思是,谁想要阅读以下内容:

select `select`, `from` as `as`
from <some really messed up table>

答案 2 :(得分:0)

我使用Bottome版本,因为我觉得它更容易阅读,但这取决于你回应查询的方式。性能没有区别,因为它读取了引号,除非它是需要的,所以你真的不知道它,除非在你的查询中编写包含多个变量的WHERE子句。

答案 3 :(得分:-1)

我会说更快不要使用数字标识符的引号;为什么要将数据类型转换的潜在开销添加到您想要的查询(可能)尽可能高效?