LoginSignup
1
2

More than 5 years have passed since last update.

MySQLメモ: INSERT時に最大値+1を使いたいけど、auto_incrementは使いたくない

Posted at

テーブルにデータ入れる時、「既存データの最大値+1」を使いたいことはよくある。
けど諸般の事情で auto_increment は使いたくない、ということも、ままある。(ないですか?)

その時の定番フレーズを良く忘れるのでメモ。

INSERT INTO テーブル名 ( id, name, とかなんとか )
  SELECT last_insert_id( ifnull(max(id), 0) + 1  ), '何かデータ', とかなんとか
  FROM テーブル名

既存データが1件も無い場合は、max()null を返すので、ifnull() で 0 扱いしてる。

いま追加した id の取得は以下の通り。

SELECT last_insert_id() FROM テーブル名

last_insert_id()、便利かも

auto_incrementされた値をもらう関数だと思ってた。
マニュアルよく読んでみたら、もちろんその用途にも使えるけど、それだけじゃなかった。

  • 引数あり last_insert_id(何かしら) で、何かしらが保存され、その場では何かしらをそのまんま返す関数。
  • 引数なしの last_insert_id() で、直近に保存された値が受け取れる。
  • 他のステートメント発行しても、last_insert_id(何かしら) を使わない限り、値は変わらない。
  • 接続ごとにサーバに保存される。別の接続で同時にほかの人が触っていても、値は変わらない

情報元

MySQLリファレンス / 12.14 情報関数 LAST_INSERT_ID()

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2