💡
[MySQL Tips]挿入後のテーブルの一番お尻の行のidの値を取得する
はじめに やりたいこと
タイトル通り「挿入後のテーブルの一番お尻の行の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 制限数;
以上から(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」じゃなかった/個人ブログ
本日は以上です。
Discussion