在列名中使用保留字
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,
);
但作为建议,请不要使用任何保留关键字以避免将来出现问题。 :)
【讨论】:
啊好吧,那行得通...我试过\认为这可能是怎么做的,因为在php中\转义了字符哈哈....非常感谢^_^每天都学习新东西 【参考方案2】:尾随下划线
简单的解决方案:为每个名称添加一个尾随下划线。
SQL 规范 SQL:2011 明确承诺永远不会在任何关键字上使用尾随下划线,无论是现在还是将来。
例如:key_
类似问题见my answer,h2数据库列名是保留字。
【讨论】:
以上是关于在列名中使用保留字的主要内容,如果未能解决你的问题,请参考以下文章