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

MySQLでエラー1064を回避!INSERT INTO … SELECT文を正しく使う方法

MySQLでINSERT INTO ... SELECT文を実行した際に、「ERROR 1064 (42000): You have an error in your SQL syntax」という構文エラーに遭遇したことはありませんか?このエラーは、キーワード間のスペース漏れや記号の書き忘れなど、構文上の小さなミスによって発生します。本記事では、実際のサンプルコードを使いながら、エラー1064を回避してINSERT INTO ... SELECT文を正しく使用する手順を解説します。

INSERT INTO ... SELECT文とは

INSERT INTO ... SELECT文は、既存のテーブルからデータを抽出(SELECT)し、その結果を別のテーブルへ挿入(INSERT)するためのSQL構文です。テーブル間でデータをコピーしたい場合に非常に便利です。

この構文でエラー1064が発生する主な原因は以下の通りです。

  • INSERT INTOSELECTの間など、キーワード同士のスペースが抜けている
  • カラム名やテーブル名のタイプミス
  • カンマや括弧などの記号の付け忘れ・余分な記号
  • 予約語をそのまま識別子として使用している

それでは、正しい手順を順番に見ていきましょう。

ステップ1:元となるテーブルを作成する

まず、コピー元となるテーブルを作成します。

mysql> create table DemoTable1
    -> (
    -> Id int NOT NULL AUTO_INCREMENT PRIMARY KEY,
    -> FirstName varchar(100)
    -> );
Query OK, 0 rows affected (0.57 sec)

ステップ2:レコードを挿入する

insertコマンドを使用して、作成したテーブルにレコードを追加します。

mysql> insert into DemoTable1(FirstName) values('John');
Query OK, 1 row affected (0.18 sec)

mysql> insert into DemoTable1(FirstName) values('Chris');
Query OK, 1 row affected (0.13 sec)

ステップ3:データを確認する

select文でテーブル内の全レコードを表示します。

mysql> select *from DemoTable1;

以下のような出力が得られます。

+----+-----------+
| Id | FirstName |
+----+-----------+
|  1 | John      |
|  2 | Chris     |
+----+-----------+
2 rows in set (0.00 sec)

ステップ4:コピー先のテーブルを作成する

次に、データの挿入先となる2つ目のテーブルを作成します。

mysql> create table DemoTable2
   -> (
   -> CustomerId int,
   -> CustomerName varchar(100)
   -> );
Query OK, 0 rows affected (0.43 sec)

ステップ5:INSERT INTO SELECT文でデータをコピーする

ここがポイントです。INSERT INTOSELECTの間には必ずスペースを入れ、カラムリストと対応関係を揃えて記述します。

mysql> insert into DemoTable2(CustomerId,CustomerName)
   -> select Id,FirstName from DemoTable1;
Query OK, 2 rows affected (0.17 sec)
Records: 2 Duplicates: 0 Warnings: 0

実行結果を見ると、「Records: 2」と表示され、2件のレコードが正常にコピーされたことがわかります。もしキーワード間のスペースが抜けていたり、カラム名が誤っていたりすると、ここでエラー1064が発生します。

ステップ6:コピー結果を確認する

select文で2つ目のテーブルの中身を確認しましょう。

mysql> select *from DemoTable2;

以下のように、DemoTable1のデータが正しくコピーされています。

+------------+--------------+
| CustomerId | CustomerName |
+------------+--------------+
|          1 | John         |
|          2 | Chris        |
+------------+--------------+
2 rows in set (0.00 sec)

まとめ

INSERT INTO ... SELECT文を正しく使用すれば、テーブル間のデータコピーは簡単に行えます。エラー1064を避けるためのチェックポイントは以下の3点です。

  • スペースの確認: insert into、テーブル名、selectなどのキーワード間に適切な空白があるか確認する
  • カラムの対応: 挿入先のカラムリストと、SELECT句で指定するカラムの数・順序が一致しているか確認する
  • 名前の正確性: テーブル名・カラム名にタイプミスがないか確認する

これらの点に注意すれば、エラー1064に悩まされることなく、安全にデータをコピーできるようになります。

  1. JavaでMySQLデータベースにデータを挿入する方法をわかりやすく解説

    JavaからMySQLデータベースにデータを挿入するには、SQLのINSERTコマンドを使用します。基本的な構文は以下の通りです。 INSERT INTO テーブル名(カラム名1, カラム名2, ......カラム名N) VALUES(値1, 値2, ......値N); ここからは、Javaプログラムを使って実際にMySQLデータベースへレコードを挿入する手順を、順を追って見ていきましょう。 ステップ1:MySQLでテーブルを作成する まず、データの挿入先となるテーブルをMySQL側に作成します。以下のクエリを実行してください。 mysql> create table Insert

  2. MySQLストアドプロシージャでDELIMITER(区切り文字)を正しく使って値を挿入する方法

    MySQLでストアドプロシージャを作成する際、DELIMITER(区切り文字)の扱いに戸惑う方は少なくありません。デフォルトではMySQLクライアントがセミコロン「;」を文の終端として解釈するため、プロシージャ内の複数のSQL文が途中で分割されてしまうことがあります。本記事では、区切り文字を正しく変更しながら、ストアドプロシージャを使ってテーブルへ値を挿入する具体的な手順を解説します。 1. サンプルテーブルを作成する まず、データを挿入するためのテーブルを作成します。ここでは学生の名前と姓を格納するテーブルを用意しました。 mysql> create table DemoTable