MySQL
 Computer >> コンピューター >  >> プログラミング >> MySQL

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 '...'」部分に示された箇所を中心に、構文を見直すことをおすすめします。

  1. MySQLエラー1093(HY000)の解決策:FROM句で更新対象テーブルを指定できないときに列の最小値を削除する方法

    はじめにMySQLでDELETE文やUPDATE文を実行する際、サブクエリ内で同じテーブルを直接参照すると、「ERROR 1093 (HY000): You cant specify target table for update in FROM clause」というエラーが発生します。これは、更新対象のテーブルをFROM句で指定できないというMySQLの制限によるものです。本記事では、このエラーを回避しながら、テーブル内の最小値を持つ行を削除する具体的な手順を解説します。ポイントは、サブクエリを派生テーブル(別名を付けたインラインビュー)としてラップすることです。ステップ1:テーブルを作成す

  2. 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