如何在 SQL 中使用保留字作为表名?

6

当使用此查询:

INSERT INTO order (order_quantity)
           VALUES ('50')

我出现了一个错误:

你的SQL语法有误,请查看与你的MariaDB服务器版本相对应的手册,以获取正确使用语法,位于第146行附近,应该是这里:order (order_quantity) VALUES('50')

我的查询有什么问题?


1
请编辑您的问题,使用更好的标题和标签。这似乎与PHP无关,而是与SQL有关 - 那么具体是哪种SQL,请用相应的标签标记。请在问题正文中添加确切的单一问题的补充说明。目前,第一句话似乎就是答案,请澄清为什么不是这样。 - Mark Schultheiss
3
可能是[You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use nea]的重复问题。 - PrakashG
1
我修改了标题,请更新一下,如果这不是实际问题。 - Mark Schultheiss
2
@Olafant 或许是这样,但我认为对于新用户来说,更好的做法是向他们说明如何改进问题,而不仅仅将其关闭为“不清楚你在问什么”,当实际问题可以从原始帖子中推断出来时。 - Mark Schultheiss
@MarkSchultheiss 如果我能再次为您在指导一个OP方面的评论点赞,我会这样做的。 - YvesLeBorg
显示剩余4条评论
1个回答

18

不建议将保留字用作数据库、表、列、变量或其他对象名称。如果您需要在 ANSI 标准语法中使用保留字作为对象名称,则必须将其用双引号括起来,以便关系引擎(无论是哪个)知道该单词正在被用作对象而不是给定上下文中的关键字。

下面是特定于不同 SQL 引擎的一些示例:

order 是一个 SQL 关键字,用于对结果进行排序 (ORDER BY ...)

如果您使用 MySQLMaria DB, 请使用反引号 (backticks) 将其括起来。

INSERT INTO `order` (order_quantity) VALUES ('50');

如果你正在使用MS SQL Server,请在其周围加上括号。

INSERT INTO [order] (order_quantity) VALUES ('50');

如果你正在使用pgSQL,请在它周围加上双引号。

INSERT INTO "order" (order_quantity) VALUES ('50');

例如,仅有常识阻止您创建一个名为INSERT的数据库,并在其中创建一个包含列VALUE(42)的表INTO

enter image description here

是的,这个查询有效:

USE [INSERT];
SELECT [INTO].[VALUE(42)] FROM [INTO];

即使是一个“保留”关键字。 - jarlh
@jarlh 有什么区别? - Cid
而双引号定界是ANSI/ISO SQL标准的方式! - jarlh
1
关键字是在定义SQL语法时使用的单词。有些是保留的(例如ORDER),有些不是(例如DESC)- 根据ANSI SQL。然而,产品可能有其他一组保留字。 - jarlh
@MarkSchultheiss 很好,谢谢。感谢 Jarlh 的精确说明。 - Cid
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接