MySQLテーブルで先頭ゼロ付きの値を選択して挿入する方法
MySQLで連番に先頭ゼロ(先行ゼロ)を付けた値をテーブルに挿入したい場合は、INSERT INTO SELECT文とLPAD()関数を組み合わせることで実現できます。LPAD()は文字列を指定した長さまで左側を特定の文字で埋める関数で、これを使えば「001」「002」のような形式のIDを簡単に生成できます。
テーブルの作成
まず、サンプル用のテーブルを作成しましょう。
mysql> create table DemoTable1967
(
Id int NOT NULL AUTO_INCREMENT PRIMARY KEY,
UserId varchar(20)
);
Query OK, 0 rows affected (0.00 sec)INSERT INTO SELECTとLPAD()でレコードを挿入
次に、insertコマンドを使ってレコードを挿入します。ここでは、MAX(id)にCOALESCE()を組み合わせることで、テーブルが空の場合でもエラーにならず「1」から採番されるようにしています。
mysql> insert into DemoTable1967(UserId)
select LPAD(COALESCE(MAX(id), 0) + 1, 3, '0') from DemoTable1967;
Query OK, 1 row affected (0.00 sec)
Records: 1 Duplicates: 0 Warnings: 0
mysql> insert into DemoTable1967(UserId)
select LPAD(COALESCE(MAX(id), 0) + 1, 3, '0') from DemoTable1967;
Query OK, 1 row affected (0.00 sec)
Records: 1 Duplicates: 0 Warnings: 0
mysql> insert into DemoTable1967(UserId)
select LPAD(COALESCE(MAX(id), 0) + 1, 3, '0') from DemoTable1967;
Query OK, 1 row affected (0.00 sec)
Records: 1 Duplicates: 0 Warnings: 0結果の確認
select文ですべてのレコードを表示して確認してみましょう。
mysql> select * from DemoTable1967;
上記のクエリを実行すると、次のような出力が得られます。
+----+--------+ | Id | UserId | +----+--------+ | 1 | 001 | | 2 | 002 | | 3 | 003 | +----+--------+ 3 rows in set (0.00 sec)
ポイント解説
- LPAD(値, 長さ, 埋め込み文字):第2引数で指定した桁数になるまで、左側を第3引数の文字で埋めます。例では3桁のゼロ埋めを行っています。
- COALESCE(MAX(id), 0):テーブルにレコードが存在しない場合、MAX(id)はNULLを返すため、COALESCE()で0に置き換えています。これにより最初の挿入でも正しく「001」が生成されます。
- 桁数の変更:4桁や5桁のゼロ埋めが必要な場合は、LPAD()の第2引数を変更するだけで対応できます。
この方法を使えば、ユーザーIDや注文番号など、先頭ゼロ付きの連番が必要な場面で柔軟に対応できます。
-
Javaを使ってMySQLテーブルにレコードを挿入する方法
はじめに本記事では、JavaのJDBC(Java Database Connectivity)を使用して、MySQLデータベースのテーブルにレコードを挿入する手順を解説します。まずテーブルを作成し、その後Javaプログラムからデータを登録するまでの一連の流れを見ていきましょう。1. MySQLでテーブルを作成するまず、データを挿入するためのテーブルを作成します。以下はMySQLでテーブルを作成するクエリです。mysql> create table DemoTable( Id int, Name varchar(30),&
-
MySQLでINSERT INTO SELECTとUNIONを組み合わせて複数行を一括挿入する方法
INSERT INTO SELECTとUNIONによる複数行の一括挿入MySQLでは、INSERT INTO ... SELECT文とUNIONを組み合わせることで、1つのSQL文で複数のレコードをまとめて挿入できます。通常、複数行の挿入にはVALUES句をカンマ区切りで並べる方法が一般的ですが、この構文を使えばSELECT文の形式で値を指定することも可能です。基本構文複数のレコードを一括挿入する場合、構文は以下のようになります。insert into yourTableName(yourColumnName1,yourColumnName2,yourColumnName3,..N)