【问题标题】:Using SQL keyword in title of table or column在表或列的标题中使用 SQL 关键字
【发布时间】:2013-02-02 00:37:15
【问题描述】:

我想将我的一张表命名为ORDER。我可以在 SQL 中使用关键字作为名称吗?这种做法有多糟糕?是否要这样做?

如果这种情况已经存在,那么如何在查询中使用该表的名称?例如,我想要:

SELECT * FROM ORDER;

SELECT * FROM ORDER ORDER BY NAME;

【问题讨论】:

标签: mysql sql keyword


【解决方案1】:

将 tableName 用反引号括起来,因为 ORDER 是保留关键字。

SELECT * FROM `ORDER` ORDER BY NAME;

在我个人看来,使用保留关键字很好,只是你不要忘记正确处理它,因为它会让你感到非常痛苦。

但多年来设计架构,我从未使用过保留关键字:D

【讨论】:

  • 我认为这是一种非常糟糕的做法。使用保留字用于其预期目的以外的目的时,阅读代码非常困难。你几乎可以组成任何你想要的名字,为什么要使用少数保留的名字?
  • @Joe 是的,但是如果 OP 指出它已经存在怎么办?无论如何,这是我自己的看法。
  • @user2080483 你是什么意思它不工作?看这里sqlfiddle.com/#!2/9cf35/1
  • @user2080483 :D 用单引号包裹表名会产生语法错误。
  • OP 询问这样做是否是一个好习惯,我回答了这个问题。当然,如果表格已经是这样,您可以使用它们 - 但我会尽快更改它们。
【解决方案2】:

正如在另一个答案中所观察到的,在 MySQL 中使用反引号表示一个词是数据库对象,从而防止与保留词混淆 - 在 SQL 的其他方言中,方括号 [ ] (SQLServer) 或双引号 @987654322使用@(大多数其他方言)代替。

根据我的经验,在表结构中使用保留字往往会导致问题,尤其是在编写新查询时 - 可能需要一段时间才能意识到返回的错误是由于保留字是列名。还有一点(正如这个问题的存在所表明的那样)并不是每个人都知道您可以通过在查询中使用适当的引用字符来解决这个问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-11-15
    • 2019-06-08
    • 2010-09-12
    • 2014-07-05
    • 1970-01-01
    • 2015-10-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多