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

MySQLのINSERT INTO SELECT構文でAUTO_INCREMENTテーブルにデータを挿入する方法

はじめに

MySQLでは、INSERT INTO ... SELECT構文を使うことで、SELECT文の結果をそのまま別のテーブルへ挿入できます。AUTO_INCREMENT列を持つテーブルに対しても、SELECT句で明示的に値を指定すれば、任意のIDを設定した状態で挿入が可能です。
本記事では、AUTO_INCREMENT主キーを持つテーブルに、INSERT INTO SELECT文で具体的な値を挿入する手順を、サンプルコードと実行結果とともに解説します。

テーブルの作成

まず、次のようにテーブルを作成します。

mysql> create table DemoTable1923
    (
    UserId int NOT NULL AUTO_INCREMENT PRIMARY KEY,
    UserName varchar(20)
    );
Query OK, 0 rows affected (0.00 sec)

このテーブルでは、UserIdがAUTO_INCREMENT付きの主キーとして定義されています。通常は挿入時にIDを省略すると自動採番されますが、今回はSELECT句から明示的に値を渡す例を見ていきましょう。

INSERT INTO SELECTでレコードを挿入する

続いて、INSERT INTO SELECT構文を使って3件のレコードを挿入します。

mysql> insert into DemoTable1923(UserId,UserName)
      select 101 as UserId,'Chris' as UserName;
Query OK, 1 row affected (0.00 sec)
Records: 1  Duplicates: 0  Warnings: 0

mysql> insert into DemoTable1923(UserId,UserName)
     select 102 as UserId,'Robert' as UserName;
Query OK, 1 row affected (0.00 sec)
Records: 1  Duplicates: 0  Warnings: 0

mysql> insert into DemoTable1923(UserId,UserName)
     select 103 as UserId,'Sam' as UserName;
Query OK, 1 row affected (0.00 sec)
Records: 1  Duplicates: 0  Warnings: 0

ポイントは、SELECT句で「101 as UserId」「'Chris' as UserName」のようにエイリアスを付けた固定値を返している点です。これにより、SELECT文の結果セットがINSERT先の列構造に対応し、AUTO_INCREMENT列であるUserIdにも明示的な値を挿入できます。

挿入結果の確認

SELECT文ですべてのレコードを表示して確認しましょう。

mysql> select * from DemoTable1923;

実行すると、次のような出力が得られます。

+--------+----------+
| UserId | UserName |
+--------+----------+
|   101 | Chris    |
|   102 | Robert   |
|   103 | Sam      |
+--------+----------+
3 rows in set (0.00 sec)

SELECT句で指定した通りの値(101〜103)が、AUTO_INCREMENT列に正しく挿入されていることがわかります。

まとめ

AUTO_INCREMENT列を含むテーブルでも、INSERT INTO SELECT構文を使えば、SELECT句で指定した値をそのまま挿入できます。なお、挿入時にUserIdを省略すれば、AUTO_INCREMENTによって連番が自動的に割り当てられます。既存データの移行やコピーなどで特定のIDを維持したい場合には、今回のようにSELECT句で明示的に値を指定する方法が有効です。

  1. Javaを使ってMySQLテーブルにレコードを挿入する方法

    はじめに本記事では、JavaのJDBC(Java Database Connectivity)を使用して、MySQLデータベースのテーブルにレコードを挿入する手順を解説します。まずテーブルを作成し、その後Javaプログラムからデータを登録するまでの一連の流れを見ていきましょう。1. MySQLでテーブルを作成するまず、データを挿入するためのテーブルを作成します。以下はMySQLでテーブルを作成するクエリです。mysql> create table DemoTable(   Id int,   Name varchar(30),&

  2. JavaでMySQLテーブルに1つのカラムのみを挿入する方法

    JavaとMySQLを連携させる際、テーブルの一部のカラムだけにデータを挿入したいケースはよくあります。その場合は、JDBCのINSERT INTOステートメントを使用します。挿入対象のカラム名を明示的に指定することで、他のカラムには影響を与えずに1つのカラムのみへ値を登録できます。この記事では、実際にテーブルを作成し、Javaのコードから「Name」という1つのカラムだけにデータを挿入する手順を解説します。1. 挿入先のテーブルを作成するまず、MySQLで以下のようにテーブルを作成しておきましょう。ここでは、varchar型の「Name」カラムを1つだけ持つシンプルなテーブルを用意します。m