在mysql中从db中选择数据时感到困惑

时间:2012-12-11 15:29:32

标签: mysql sql phpmyadmin reserved-words

我有2个表:PLAYERGROUP

我打电话的时候:

SELECT * FROM PLAYER

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

SELECT * FROM GROUP

有错误:

  

#1064 - 您的SQL语法出错;检查手册   对应于您的MySQL服务器版本,以便使用正确的语法   靠近' GROUP'在第1行

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

3 个答案:

答案 0 :(得分:5)

GROUPreserved word,必须使用后退标记对其进行转义。

SELECT * FROM `GROUP`

避免使用保留字的表名或列也是更好的做法。另外,请指定列列表,而不要使用*

答案 1 :(得分:4)

GROUPreserved keyword。你必须逃避它,就像这样

  SELECT * FROM `GROUP`

需要注意的事项:

  • 强烈建议不要将表格命名为group,最好使用复数Groups
  • 另外,请尽量避免使用*

答案 2 :(得分:3)

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

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

  

因此,在您的情况下,数据库引擎因为查询而抱怨   需要1个强制子句SELECT和可选子句FROM,WHERE,   ORDER BY,GROUP BY,HAVING,LIMIT等...... read more here

我们可能会想要使用这些关键字;特别是如果他们已经在我们的问题域(或图表)中建模。例如,下订单的客户产生2个实体客户端和订单等,或执行检查给予MECHANIC和CHECK的机制。甚至是表达喜欢的FACEBOOK_USER。或者在你的情况下,例如可能有一组人。

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

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

b)它被转换成的相应DB表总是用复数命名。逻辑是该表将包含该实体的许多实例。因此,ORDERS,LIKES,CHECKS,STUDENTS,CARS

  

最后,你决定因为你真的可以使用GROUP   想要或需要使你的表名像一个保留字。只是   记得给他们一个特殊的待遇,把它们放在引号中   查询时使用反引号(“`”)。在创建数据库引擎的那一刻   不会抱怨,相信你知道自己在做什么。