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句で明示的に値を指定する方法が有効です。
-
Javaを使ってMySQLテーブルにレコードを挿入する方法
はじめに本記事では、JavaのJDBC(Java Database Connectivity)を使用して、MySQLデータベースのテーブルにレコードを挿入する手順を解説します。まずテーブルを作成し、その後Javaプログラムからデータを登録するまでの一連の流れを見ていきましょう。1. MySQLでテーブルを作成するまず、データを挿入するためのテーブルを作成します。以下はMySQLでテーブルを作成するクエリです。mysql> create table DemoTable( Id int, Name varchar(30),&
-
JavaでMySQLテーブルに1つのカラムのみを挿入する方法
JavaとMySQLを連携させる際、テーブルの一部のカラムだけにデータを挿入したいケースはよくあります。その場合は、JDBCのINSERT INTOステートメントを使用します。挿入対象のカラム名を明示的に指定することで、他のカラムには影響を与えずに1つのカラムのみへ値を登録できます。この記事では、実際にテーブルを作成し、Javaのコードから「Name」という1つのカラムだけにデータを挿入する手順を解説します。1. 挿入先のテーブルを作成するまず、MySQLで以下のようにテーブルを作成しておきましょう。ここでは、varchar型の「Name」カラムを1つだけ持つシンプルなテーブルを用意します。m