LoginSignup
0
0

More than 3 years have passed since last update.

[MySQL]挿入後のテーブルの一番お尻の行のidの値を取得する

Last updated at Posted at 2020-09-20

はじめに やりたいこと

タイトル通り「挿入後のテーブルの一番お尻の行のidの値を取得」したい。

次のようなテーブルがあるとする。

  • テーブル名:user_list
id ユーザー名
1 はじめ君
2 次子ちゃん
3 三版君
4 四手ちゃん
5 五点さん

※idはオートインクリメントの属性があるため挿入のたびに自動で+1されるとする。

上記テーブルを下記のようにした際に一番お尻のidの値(今回だと6)を取得する方法を紹介する

-- (コメント):id=1のユーザーを一番おしりに挿入。
INSERT INTO user_list (ユーザー名)
SELECT ユーザー名 FROM user_list WHERE id = 1;

※ちなみに上のようにINSERTとSELECTを組み合わせる場合はVALUESはいらないのです!(INSERT...SELECT構文)

  • テーブル名:user_list
id ユーザー名
1 はじめ君
2 次子ちゃん
3 三版君
4 四手ちゃん
5 五点さん
6 はじめ君

[やり方1] idの大きい順に並べ替えて一番最初の行のidを取得

まず並べ替えの方法を復習しましょう。
あるカラム(列)を基準にソート(並べ替え)するにはORDER BY句を用います。また逆順のソートをするにはDESCキーワードを追加します。また、LIMIT 句を使用すると、SELECT ステートメントによって返される行数を制約させることが出来ます。

ORDER BY 基準のカラム(列) DESC LIMIT 制限数;

※参考:SELECT 構文/MySQL公式

以上から(1)「idをORDER BY句とDESCで大きい順に並べて」(2)「LIMIT句で1に限定」すれば、idの一番大きい値が取得出来ることがわかるでしょう。

実際にやってみましょう。

SELECT id FROM user_list ORDER BY id DESC LIMIT 1;
->6

[やり方2] 情報関数を用いて挿入されたidの値を取得

MySQLでは標準で便利な関数が数多く用意されています。今回はそういった関数の中の情報関数の一つであるLAST_INSERT_ID()を用いて『前回の INSERT での AUTOINCREMENT カラムの値』を取得しましょう。

SELECT LAST_INSERT_ID();

こちらのほうが圧倒的に簡単ですね。

ただし公式ドキュメントにもある通りLAST_INSERT_ID関数は『AUTOINCREMENT カラムの値』を取得してくれるだけであって『最後にインサートしたレコードのID』では無いことに注意しましょう。
※参考:MySQLのlast_insert_id()は「最後にインサートしたレコードのID」じゃなかった/個人ブログ

本日は以上です。

0
0
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
0
0