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 INTOとSELECTの間など、キーワード同士のスペースが抜けている- カラム名やテーブル名のタイプミス
- カンマや括弧などの記号の付け忘れ・余分な記号
- 予約語をそのまま識別子として使用している
それでは、正しい手順を順番に見ていきましょう。
ステップ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 INTOとSELECTの間には必ずスペースを入れ、カラムリストと対応関係を揃えて記述します。
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に悩まされることなく、安全にデータをコピーできるようになります。
-
JavaでMySQLデータベースにデータを挿入する方法をわかりやすく解説
JavaからMySQLデータベースにデータを挿入するには、SQLのINSERTコマンドを使用します。基本的な構文は以下の通りです。 INSERT INTO テーブル名(カラム名1, カラム名2, ......カラム名N) VALUES(値1, 値2, ......値N); ここからは、Javaプログラムを使って実際にMySQLデータベースへレコードを挿入する手順を、順を追って見ていきましょう。 ステップ1:MySQLでテーブルを作成する まず、データの挿入先となるテーブルをMySQL側に作成します。以下のクエリを実行してください。 mysql> create table Insert
-
MySQLストアドプロシージャでDELIMITER(区切り文字)を正しく使って値を挿入する方法
MySQLでストアドプロシージャを作成する際、DELIMITER(区切り文字)の扱いに戸惑う方は少なくありません。デフォルトではMySQLクライアントがセミコロン「;」を文の終端として解釈するため、プロシージャ内の複数のSQL文が途中で分割されてしまうことがあります。本記事では、区切り文字を正しく変更しながら、ストアドプロシージャを使ってテーブルへ値を挿入する具体的な手順を解説します。 1. サンプルテーブルを作成する まず、データを挿入するためのテーブルを作成します。ここでは学生の名前と姓を格納するテーブルを用意しました。 mysql> create table DemoTable