[解決済み] MySQLエラー#1064を修正するにはどうすればよいですか?
質問
MySQLにコマンドを発行すると、エラー#1064 "シンタックスエラー"が表示されます。
-
どのような意味ですか?
-
どうすれば直るのですか?
どのように解決するのですか?
<ブロッククオートTL;DR
エラー#1064は、MySQLがあなたのコマンドを理解できないことを意味します。 これを修正するには
-
エラーメッセージを読む。 それは、次のことを教えてくれます。 コマンドの MySQLは混乱しました。
-
コマンドを調べる。 プログラミング言語を使ってコマンドを作成する場合は
echo
,console.log()
またはそれに相当するものを表示します。 コマンド全体 を表示させることができます。 -
マニュアルを確認する MySQLの設定と比較することで その時点で期待される 問題は明白です。
-
予約語をチェックする。 オブジェクト識別子でエラーが発生した場合、それが予約語でないことを確認します (予約語である場合は、適切に引用されていることを確認します)。
-
ああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああ 1064は何をするのか 意味 ?
エラーメッセージは次のようなものがあります。 見る しかし、何が問題だったのかを特定するのに十分な情報を提供してくれます。 MySQL が教えてくれることを正確に理解することで、将来この種の問題が発生したときに、それを解決することができるようになります。
多くのプログラムと同様に、MySQL のエラーは タイプ が発生しました。 エラー番号1064 は構文エラーです。
-
あなたの言う「構文」とは何ですか? 魔術ですか?
シンタックス(syntax)とは、多くのプログラマーがコンピュータの文脈でしか目にしない言葉ですが、実は広く言語学から借用したものなのです。 これは、文の構造を意味します。 文法規則 言い換えれば、何をもってして 有効文 という言語があります。
例えば、次の英文には構文エラーがあります(不定冠詞 "a" は必ず名詞の前に置かなければならないため)。
<ブロッククオートこの文は構文エラーaを含んでいます。
-
MySQLとどう関係があるのですか?
コンピュータにコマンドを発行すると、まずそのコマンドを理解するために解析する必要があります。 構文エラーとは、その言語で有効なコマンドを構成していないため、パーサーが質問された内容を理解できないことを意味します。 コマンドはプログラミング言語の文法に違反しています。 .
ここで重要なのは、コンピュータがコマンドを理解しなければ、そのコマンドで何かをすることはできないということです。 構文エラーがあるため、MySQL は何を求めているのかがわからず、そのためあきらめます。 データベースを見る前に したがって、スキーマやテーブルの内容は関係ありません。
-
-
どうすれば直るの?
明らかに、そのコマンドが MySQL の文法に違反していることを確認する必要があります。 これはかなり難解に聞こえるかもしれませんが、MySQL はここで私たちを助けようと懸命に努力しています。 私たちがすべきことは...
-
メッセージを読む
MySQL は、以下のことを教えてくれるだけではありません。 まさに パーサーはどこで構文エラーに遭遇したか、またそれを修正するための提案も行います。 例えば、次のようなSQLコマンドを考えてみましょう。
UPDATE my_table WHERE id=101 SET name='foo'
このコマンドを実行すると、次のようなエラーメッセージが表示されます。
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'WHERE id=101 SET name='foo'' at line 1
MySQL は、この単語まではすべてうまくいっていたようだと伝えています。
WHERE
しかし、その後、問題が発生しました。 言い換えれば、それはWHERE
ということになります。というメッセージは
...near '' at line...
は、単にコマンドの終了が予期せぬものであったことを意味します。つまり、コマンドが終了する前に何か他のものが現れるはずです。 -
コマンドの実際のテキストを検証してみましょう
プログラマーは、しばしばプログラミング言語を使ってSQLコマンドを作成します。例えば、phpのプログラムでは、次のような(間違った)行があるかもしれません。
$result = $mysqli->query("UPDATE " . $tablename ."SET name='foo' WHERE id=101");
これを2行で書くと
$query = "UPDATE " . $tablename ."SET name='foo' WHERE id=101" $result = $mysqli->query($query);
を追加すると
echo $query;
またはvar_dump($query)
をクリックすると、クエリが実際に次のように表示されることを確認できます。UPDATE userSET name='foo' WHERE id=101
多くの場合、すぐにエラーが表示され、それを修正することができます。
-
命令に従え!
また、MySQLは、以下のことを推奨しています。 使用する正しい構文については、MySQL のバージョンに対応するマニュアルを確認してください。 となります。 そうしましょう。
MySQL v5.6を使用しているので、次に回すのは そのバージョンのマニュアルにある
UPDATE
コマンド . ページの一番最初にあるのは、コマンドの文法です(これはすべてのコマンドに当てはまります)。UPDATE [LOW_PRIORITY] [IGNORE] table_reference SET col_name1={expr1|DEFAULT} [, col_name2={expr2|DEFAULT}] ... [WHERE where_condition] [ORDER BY ...] [LIMIT row_count]
の下でこの構文の解釈の仕方をマニュアルで説明しています。 組版・構文規則 しかし、ここでは、次のことを認識すれば十分である:角括弧内に含まれる節
[
と]
は任意で、縦棒|
は代替案を示し、楕円は...
は、簡潔さのための省略、または前の節が繰り返される可能性があることを示す。パーサーは、このコマンドに含まれるすべてのものが
WHERE
キーワード、言い換えればテーブル参照までが含まれる。 文法を見てみるとtable_reference
は、その後にSET
キーワードがあります。WHERE
というキーワードがあります。 このため、パーサーはその時点で問題が発生したと報告するのです。
予約の注意事項
もちろん、これは単純な例である。 しかし、上記の2つのステップを踏むことで、(すなわち コマンドのどこに という文法違反を発見し、マニュアルに書かれている その時点で期待されていること )、事実上すべてのシンタックスエラーを容易に特定することができます。
事実上すべて」と言ったのは、そう簡単には発見できない問題もあるからです。それは、パーサーが、遭遇した言語要素が、あなたが意図したのとは別のことを意味していると思い込んでしまう場合です。 次のような例を考えてみましょう。
UPDATE my_table SET where='foo'
ここでも、パーサーは
WHERE
この時点で同様の構文エラーを発生させますが、あなたが意図していないwhere
はSQLキーワードであり、更新するカラムを特定するためのものだったのです! しかし、以下のドキュメントで説明されているように スキーマオブジェクト名 :識別子に特殊文字が含まれていたり、予約語である場合は しなければならない を引用してください。(例外。(例外:修飾名のピリオドに続く予約語は識別子でなければならないので、引用する必要はありません)。 予約語の一覧は 9.3項 "キーワードと予約語" .
[ デレステ ]
識別子の引用文字がバックティック("
`
"):mysql> SELECT * FROM `select` WHERE `select`.id > 100;
もし
ANSI_QUOTES
SQLモードが有効な場合、識別子を二重引用符で囲むことも可能である。mysql> CREATE TABLE "test" (col INT); ERROR 1064: You have an error in your SQL syntax... mysql> SET sql_mode='ANSI_QUOTES'; mysql> CREATE TABLE "test" (col INT); Query OK, 0 rows affected (0.00 sec)
-
関連
-
[解決済み】カラムのデータが切り捨てられた?
-
[解決済み】MySQLのエラーコードです。MySQL WorkbenchでUPDATE中に1175のエラーが発生しました。
-
[解決済み] エラー 1115 (42000)。不明な文字セットです。'utf8mb4'
-
[解決済み] JavaScriptで "use strict "は何をするのか、その根拠は?
-
[解決済み] Bashで文字列変数を連結する方法
-
[解決済み] MySQLでコマンドラインを使用してSQLファイルをインポートするにはどうすればよいですか?
-
[解決済み] MySQLの複数行を1つのフィールドに連結することはできますか?
-
[解決済み] MySQLでコマンドラインを使用してユーザーアカウントのリストを取得するにはどうすればよいですか?
-
[解決済み] MySQLのクエリ結果をCSV形式で出力するにはどうすればよいですか?
-
[解決済み】MySQLのDatetimeカラムにデフォルト値を設定する方法とは?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】MySQLユーザーDBにパスワードカラムがない - OSXへのMySQLインストール
-
[解決済み】カラムのデータが切り捨てられた?
-
[解決済み】mysql.plugin テーブルを開くことができません。mysql_upgradeを実行して作成してください。
-
[解決済み】mysqld_safe UNIX ソケットファイル用のディレクトリ '/var/run/mysqld' が存在しません。
-
[解決済み] MySQLの グループ関数の無効な使用
-
[解決済み] MySQL エラー: キーの長さがないキー指定
-
[解決済み] MySQLです。テーブルを作成できません (errno: 150)
-
[解決済み] <TABLE> のテーブルストレージエンジンには、order by クエリでこのオプションがありません (ERROR 1031)。
-
[解決済み] SQL エラー - テーブルの定義が正しくありません; auto カラムは 1 つしか存在できません。
-
[解決済み] MySQLの グループ関数の無効な使用