次のような単純な MySQL クエリを実行しようとしています:
しかし、次のエラーが表示されます:
エラー 1064 (42000): SQL 構文にエラーがあります。'key) VALUES ('Tim', 'Florida', 42)'# # の詳細については、MySQL サーバーのバージョンのマニュアルを確認してください。 # 行 1 付近で使用する正しい構文
'key) VALUES ('Tim', 'Florida', 42)'# # の詳細については、MySQL サーバーのバージョンのマニュアルを確認してください。 # 行 1
###質問###
、INSERT、DELETE などの特定の単語は予約語です。これらには特別な意味があるため、これらをテーブル名、カラム名、またはその他のタイプの識別子として使用するときは、識別子をバッククォートで囲んでいない限り、MySQL はそれを構文エラーとして扱います。 公式ドキュメントに記載されているように、
INSERT
DELETE
10.2 スキーマ オブジェクト名 (強調追加): em> キーワードと予約語の完全なリストは、
10.3 キーワード セクションと予約語 にあります。このページでは、「(R)」に続く単語は予約語です。この問題を引き起こす傾向にある多くの予約語を含め、いくつかの予約語を以下に示します。 ###に追加### ###そして### ###前に### ###著者### ###電話### ###場合### ###状態### ###消去### ###降順### ###説明する### ###から### ###グループ### ###存在する### ###索引### ###入れる### ###間隔### ###はい###
###質問###
MySQL では、
SELECT、
公式ドキュメントに記載されているように、
INSERT
、DELETE
などの特定の単語は予約語です。これらには特別な意味があるため、これらをテーブル名、カラム名、またはその他のタイプの識別子として使用するときは、識別子をバッククォートで囲んでいない限り、MySQL はそれを構文エラーとして扱います。10.2 スキーマ オブジェクト名 (強調追加): em> キーワードと予約語の完全なリストは、
10.3 キーワード セクションと予約語 にあります。このページでは、「(R)」に続く単語は予約語です。この問題を引き起こす傾向にある多くの予約語を含め、いくつかの予約語を以下に示します。 ###に追加### ###そして### ###前に### ###著者### ###電話### ###場合### ###状態### ###消去### ###降順### ###説明する### ###から### ###グループ### ###存在する### ###索引### ###入れる### ###間隔### ###はい###
重要事項###のように###- 制限
###長さ###
###マッチ###
###いいえ###
- オプション
###または###
###注文###
###パーティション###
###ランキング###
- 参考文献
###選ぶ###
###テーブル###
###に###
- 更新
###どこ###
-
###解決###
選択肢は 2 つあります。 -
###1。予約語を識別子として使用しないでください
- 最も簡単な解決策は、予約語を識別子として使用しないことです。予約語ではない、列の別の適切な名前が見つかる可能性があります。
- これにはいくつかの利点があります:
-
- これにより、データベースを使用する開発者や他の開発者が、特定の識別子が予約語であることを忘れたり知らなかったりしたために、誤って構文エラーを書き込む可能性が排除されます。 MySQL には多くの予約語があり、ほとんどの開発者がそれらをすべて知っているとは考えられません。最初からこれらの単語を使用しないことで、自分自身や将来の開発者に罠を仕掛けることを避けることができます。
-
- 識別子の引用方法は SQL 言語によって異なります。 MySQL はデフォルトでバックティックを使用して識別子を引用しますが、ANSI 準拠の SQL (ここで説明するように、実際には ANSI SQL モードの MySQL) は二重引用符を使用して識別子を引用します。したがって、バックティックを使用して識別子を引用するクエリは、他の SQL 言語への移植性が低くなります。
-
- 将来のエラーのリスクを純粋に軽減するという目的であれば、これは一般にバッククォート識別子よりも賢明なアプローチです。
###2。バックティック - を使用する
テーブルまたは列の名前を変更できない場合は、前に引用した - 10.2 スキーマ オブジェクト名
-
のように、問題の識別子をバッククォート (- `
) で囲みます。 -
使用法を示す例 (- 10.3 キーワードと予約語
から抜粋): -
- 繰り返しになりますが、質問内のクエリは、次のようにキー
key- をバッククォートで囲むことで修正できます。
リーリー