MySQLのLAST_INSERT_ID()

2 番目の INSERT ステートメントで 3 つの新しい行が t に挿入されましたが、これらの行の 1 番目に生成された ID は 2 であり、あとに続く SELECT ステートメントでも、この値が LAST_INSERT_ID() によって返されます。

MySQL :: MySQL 5.6 リファレンスマニュアル :: 12.14 情報関数

…おい、こいつらは一体何を考えてDBを設計しているんだ?そこで「2」と返されたら困るだろ。


載っているサンプルは「三つの行をテーブルに追加して、最後のキーは4になった」状態。だが「 LAST_INSERT_ID()は2を返します」といっている。この関数は一体何のために使用できるというのだろうか…


調べようと思ったのは「最後に追加された」とは「テーブルに関して決まる」のか「接続に対して決まるのか」だったのだが、それ以前にこの関数が使える気がしなくなった。


(関数が読み出しのための引数を取らないから、接続に関して決まるのだろう。PDOのpostgreSQLでは引数に「シーケンスオブジェクト名を指定しろ」になっているので、テーブルに関して決まっていると推測される。)