我有2个表:PLAYER
和GROUP
。
我打电话的时候:
SELECT * FROM PLAYER
一切都好,但是当我打电话时:
SELECT * FROM GROUP
有错误:
#1064
- 您的SQL语法出错;检查手册 对应于您的MySQL服务器版本,以便使用正确的语法 靠近' GROUP'在第1行
我不明白为什么会出现这样的错误。
答案 0 :(得分:5)
答案 1 :(得分:4)
GROUP
是reserved 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 想要或需要使你的表名像一个保留字。只是 记得给他们一个特殊的待遇,把它们放在引号中 查询时使用反引号(“`”)。在创建数据库引擎的那一刻 不会抱怨,相信你知道自己在做什么。