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

1 min read読了の目安(約1700字

はじめに やりたいこと

タイトル通り「挿入後のテーブルの一番お尻の行の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」じゃなかった/個人ブログ

本日は以上です。