MySQLエラー1064「SQL構文にエラーがあります。使用する正しい構文については、MySQLサーバーのバージョンに対応するマニュアルを確認してください…」の解決方法
この種のエラーは、SQL文に誤った構文を使用した場合に発生します。本記事では、テーブル作成時に実際にエラーが発生する例を通じて、原因と解決方法をわかりやすく解説します。
エラーが発生する例
まず、誤った構文を含むテーブル作成文を見てみましょう。以下の例では、DATE型のカラムに対して不正な引数「(100)」を指定しています。
mysql> create table DemoTable689(
UserId int NOT NULL AUTO_INCREMENT PRIMARY KEY,
UserName varchar(100),
UserLoginDate date(100) NOT NULL
);
このSQLを実行すると、次のような構文エラーが出力されます。
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 '(100) NOT NULL )' at line 5
エラーの原因
MySQLのDATE型はサイズ(表示幅)の指定を受け付けません。INT型などとは異なり、date(100)のように括弧で数値を指定することはできないため、構文エラーとして扱われてしまいます。
エラーの修正方法
このエラーを修正するには、DATE型のカラム定義から余計な引数を取り除き、単純に DATE NOT NULL と記述します。正しいテーブル作成文は以下の通りです。
mysql> create table DemoTable689(
UserId int NOT NULL AUTO_INCREMENT PRIMARY KEY,
UserName varchar(100),
UserLoginDate date NOT NULL
);
Query OK, 0 rows affected (0.68 sec)
今度はエラーなく、テーブルが正常に作成されました。
データの挿入と動作確認
続いて、INSERTコマンドを使ってテーブルにレコードを挿入してみましょう。日付の指定には DATE(NOW()) や文字列形式の日付、CURDATE() など、さまざまな方法が利用できます。
mysql> insert into DemoTable689(UserName,UserLoginDate) values('John',DATE(NOW()));
Query OK, 1 row affected (0.40 sec)
mysql> insert into DemoTable689(UserName,UserLoginDate) values('Chris','2018-01-21');
Query OK, 1 row affected (0.21 sec)
mysql> insert into DemoTable689(UserName,UserLoginDate) values('Robert',CURDATE());
Query OK, 1 row affected (0.20 sec)
SELECT文ですべてのレコードを表示して確認します。
mysql> select *from DemoTable689;
実行結果は以下の通りです。エラーが解消され、データが正常に登録されていることがわかります。
+--------+----------+---------------+ | UserId | UserName | UserLoginDate | +--------+----------+---------------+ | 1 | John | 2019-07-21 | | 2 | Chris | 2018-01-21 | | 3 | Robert | 2019-07-21 | +--------+----------+---------------+ 3 rows in set (0.00 sec)
まとめ
MySQLのエラー1064は、SQL文の構文ミスによって発生します。今回のケースでは、DATE型に存在しないサイズ指定「(100)」を付けていたことが原因でした。DATE型には引数を指定せず、「DATE NOT NULL」のようにシンプルに定義することで問題を解消できます。同様のエラーに遭遇した際は、エラーメッセージ内の「near '...'」部分に示された箇所を中心に、構文を見直すことをおすすめします。
-
MySQLエラー1093(HY000)の解決策:FROM句で更新対象テーブルを指定できないときに列の最小値を削除する方法
はじめにMySQLでDELETE文やUPDATE文を実行する際、サブクエリ内で同じテーブルを直接参照すると、「ERROR 1093 (HY000): You cant specify target table for update in FROM clause」というエラーが発生します。これは、更新対象のテーブルをFROM句で指定できないというMySQLの制限によるものです。本記事では、このエラーを回避しながら、テーブル内の最小値を持つ行を削除する具体的な手順を解説します。ポイントは、サブクエリを派生テーブル(別名を付けたインラインビュー)としてラップすることです。ステップ1:テーブルを作成す
-
MySQLエラー#1064の解決法|SQL構文エラー「TYPE=MyISAM付近」の原因と対処
MySQLエラー#1064とは?テーブル作成時にストレージエンジン名を指定する際、古い構文である「TYPE」を使用すると、MySQLエラー#1064(SQL構文エラー)が発生します。この「TYPE」構文はMySQL 5.5で非推奨となり、その後のバージョンで削除されたためです。実際に発生するエラーは以下の通りです。mysql> create table DemoTable1836 ( ClientId int NOT NULL AUTO_INCREMENT PRIMAR