2

我有 2 张桌子:PLAYERGROUP.

当我打电话时:

SELECT * FROM PLAYER

一切都很好,但是当我打电话时:

SELECT * FROM GROUP

有错误:

#1064- 您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 1 行的“GROUP”附近使用正确的语法

我不明白为什么会出现这样的错误。

4

3 回答 3

5

GROUP保留字,必须用反引号转义。

SELECT * FROM `GROUP`

避免使用作为保留字的表名或列也是更好的做法。此外,指定一个列列表,而不是使用*.

于 2012-12-11T15:30:15.560 回答
4

GROUP保留关键字。你必须逃避它,就像这样

  SELECT * FROM `GROUP`

注意事项:

  • 强烈建议不要给表格命名group,最好使用复数Groups
  • 另外,尽量避免*
于 2012-12-11T15:30:11.480 回答
3

正如您使用保留关键字 SELECT 和 FROM 来构建查询一样,在命名所有表、视图、约束和列时,您可能希望避免使用其他保留关键字,如下表中的那些。

(一些)保留关键字列表:WHERE、ORDER、GROUP、UPDATE、DELETE、CHECK、CHANGE、LIKE 等...

因此,在您的情况下,数据库引擎抱怨,因为查询需要 1 个强制子句 SELECT 和可选子句 FROM、WHERE、ORDER BY、GROUP BY、HAVING、LIMIT 等……在这里阅读更多

我们可能很想使用这些关键字;特别是如果它们已经在我们的问题域(或图表)中建模。例如,客户下订单产生 2 个实体 CLIENT 和 ORDER 等,或者机械师执行检查,给出 MECHANIC 和 CHECK。甚至是表达 LIKE 的 FACEBOOK_USER。或者在您的情况下,例如可能有一群人。

作为一般规则,您可以像这样转换实体以避免出现问题:-

a) 实体总是(在纸上)建模为单一的,因为它代表现实世界或问题域中的概念/资产/人。例如。订购,喜欢,检查,学生,汽车

b) 它转换成的相应 DB 表总是使用复数命名。逻辑是该表将包含该实体的许多实例。因此,订单、喜欢、支票、学生、汽车

最后,您做出决定,因为如果您真的想要或需要使您的表名像保留字一样,您真的可以使用 GROUP。只需记住在查询时使用反引号 (“`”) 将它们放在引号中,以便对其进行特殊处理。在创建时,数据库引擎不会抱怨,相信您知道自己在做什么。

于 2012-12-11T16:40:17.710 回答