【问题标题】:Using reserved words in column names在列名中使用保留字
【发布时间】:2013-03-31 00:55:26
【问题描述】:

这是一些简单的代码,但我就是不知道为什么我不能用这个词作为表格的实体

CREATE TABLE IF NOT EXISTS users(
key INT PRIMARY KEY NOT NULL AUTO_INCREMENT,
username VARCHAR(50) NOT NULL,
);

我意识到如果我使用 key 不能使用“key”,mysql 会要求我检查语法,但如果我使用“id”或其他任何形式,则会创建表。

有人知道我如何将实体名称创建为键吗?不是什么重要的事情,因为我可以只使用 id 而不是 key,但是因为我发现了这个错误,所以我不知道是否有办法让它工作。

【问题讨论】:

  • 我强烈建议您找到比 SQL 保留字更有意义的名称。也许UserId 是个好名字——对于不经意的观察者来说,它的信息量要大得多。
  • @GordonLinoff 你的评论太天真了。我上次统计时,各种数据库系统保留了一千多个字。在设计名称时,它是否可能与保留字冲突并不明显。
  • @BasilBourque 。 . . KEY 是 SQL 语法的一部分——想想 PRIMARY KEY。认为在 SQL 中创建表的人应该知道基本的句法元素并不是天真的想法。

标签: mysql sql database


【解决方案1】:

如果您愿意,您仍然可以使用key。用反引号把它包起来,

CREATE TABLE IF NOT EXISTS users
(
    `key` INT PRIMARY KEY NOT NULL AUTO_INCREMENT,
    username VARCHAR(50) NOT NULL,
);

但作为建议,请不要使用任何保留关键字以避免将来出现问题。 :)

【讨论】:

  • 啊好吧,那行得通...我试过\认为这可能是怎么做的,因为在php中\转义了字符哈哈....非常感谢^_^每天都学习新东西
【解决方案2】:

尾随下划线

简单的解决方案:为每个名称添加一个尾随下划线

SQL 规范 SQL:2011 明确承诺永远不会在任何关键字上使用尾随下划线,无论是现在还是将来。

例如:key_

类似问题见my answerh2数据库列名是保留字

【讨论】:

    猜你喜欢
    • 2013-09-25
    • 1970-01-01
    • 2015-08-31
    • 2022-07-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-02
    • 1970-01-01
    相关资源
    最近更新 更多