在列名中使用保留字

Posted

技术标签:

【中文标题】在列名中使用保留字【英文标题】: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 是个好名字——对于不经意的观察者来说,它的信息量要大得多。 Why can't I use certain words as table/column names in MySQL? 的可能重复项 @GordonLinoff 你的评论太天真了。我上次统计时,各种数据库系统保留了一千多个字。在设计名称时,它是否可能与保留字冲突并不明显。 @BasilBourque 。 . . KEY 是 SQL 语法的一部分——想想 PRIMARY KEY。认为在 SQL 中创建表的人应该知道基本的句法元素并不是天真的想法。 【参考方案1】:

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

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

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

MySQL Reserved Keywords List

【讨论】:

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

尾随下划线

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

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

例如:key_

类似问题见my answer,h2数据库列名是保留字

【讨论】:

以上是关于在列名中使用保留字的主要内容,如果未能解决你的问题,请参考以下文章

由于在 MySQL 中使用保留字作为表名或列名导致的语法错误

Spring Boot/JPA:引用的保留字列名不起作用

9.6. MySQL中保留字的处理

Oracle基础之保留字和关键字

在ASP中SQL语句中表名或列名为啥要加中括号

MySQL之SELECT 语句详解