私は2つのテーブルを持っています:PLAYER
とGROUP
。
私が電話するとき:
SELECT * FROM PLAYER
すべてが大丈夫ですが、私が電話すると:
SELECT * FROM GROUP
エラーがあります:
#1064
-SQL構文にエラーがあります。1行目の「GROUP」の近くで使用する正しい構文については、MySQLサーバーのバージョンに対応するマニュアルを確認してください。
なぜそのようなエラーがあるのかわかりません。
私は2つのテーブルを持っています:PLAYER
とGROUP
。
私が電話するとき:
SELECT * FROM PLAYER
すべてが大丈夫ですが、私が電話すると:
SELECT * FROM GROUP
エラーがあります:
#1064
-SQL構文にエラーがあります。1行目の「GROUP」の近くで使用する正しい構文については、MySQLサーバーのバージョンに対応するマニュアルを確認してください。
なぜそのようなエラーがあるのかわかりません。
GROUP
は予約語であり、バックティックでエスケープする必要があります。
SELECT * FROM `GROUP`
また、予約語であるテーブル名や列の使用は避けることをお勧めします。また、列リストを指定し、を使用しないで*
ください。
GROUP
予約キーワードです。あなたはそれを逃れなければなりません
SELECT * FROM `GROUP`
注意事項:
group
複数形を使用することをお勧めしますGroups
。*
。予約キーワードSELECTおよびFROMを使用してクエリを作成するのと同じように、すべてのテーブル、ビュー、制約、および列に名前を付けるときに避けたい、次のリストのような他の予約キーワードがあります。
(いくつかの)予約キーワードのリスト:WHERE、ORDER、GROUP、UPDATE、DELETE、CHECK、CHANGE、LIKEなど...
したがって、あなたの場合、クエリには1つの必須句SELECTとオプション句FROM、WHERE、ORDER BY、GROUP BY、HAVING、LIMITなどが必要であるためDBエンジンが文句を言っています...詳細はこちら
これらのキーワードを使用したくなるかもしれません。特に、問題のドメイン(または図)でモデル化されている場合。たとえば、注文を行うクライアントは、2つのエンティティCLIENTとORDERなど、またはMECHANICとCHECKを与えるチェックを実行するメカニックを生成します。または、LIKEを表現するFACEBOOK_USERですら。またはあなたの場合、例えば人々のグループがあるかもしれません。
原則として、問題を回避するために、このようにエンティティを変換できます。-
a)エンティティは、現実世界または問題領域の概念/資産/人を表すため、常に(紙の上で)特異なものとしてモデル化されます。例えば。注文、いいね、チェック、学生、車
b)変換される対応するDBテーブルには、常に複数形を使用して名前が付けられます。ロジックは、テーブルにそのエンティティのインスタンスが多数含まれるというものです。したがって、注文、いいね、小切手、学生、車
結局、テーブル名を予約語のようにする必要がある場合は、本当にGROUPを使用できるため、決定します。クエリの際にバッククォート(「 `」)を使用して引用符で囲むことにより、特別な扱いをすることを忘れないでください。作成の時点では、DBエンジンは文句を言わず、自分が何をしているかを知っていると信じています。