[MySQL] 連番をINSERTと同時に挿入する方法

1 min read

連番を挿入する場合、色々な方法があるかと思いますが、
AUTO_INCREMENT なんかだと欠番が出来ちゃうし…
MAX 関数で取得した最大値+1 を INSERT 時に一緒に挿入して…だと
同時アクセスされた時にうまく値をもってこれなかったりするし、
それに 2 回 SQL を発行しないといけないし…
…一発でスマートにやりたいものです。

それを実現してくれるのが

SELECT COALESCE(MAX(連番を入れるカラム)+1,1)

です。

コイツを INSERT 文に入れてやります。

INSERT INTO テーブル名(連番を入れるカラム, 他のカラム...)
SELECT COALESCE(MAX(連番を入れるカラム)+1,1), ?, ?
FROM テーブル名;

もしくは

INSERT INTO テーブル名 (連番を入れるカラム, 他のカラム...)
VALUES ((SELECT COALESCE(MAX(連番を入れるカラム)+1,1) FROM テーブル名), 他の値...)

これで好きな値と一緒に連番が振れるようになります。