こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

バルクINSERT直後に、最後のIncremet値は取得できますか?

PHPからMySQLへトランザクションを使わずに、
INSERT INTO test (id,count) VALUES (5,5),(6,6)
のようにINSERTした直後に、SELECT LAST_INSERT_ID();
としても、5が返却されてしまいます。

これはMySQLの仕様でしょうか?

又、
SELECT LAST_INSERT_ID() ではなく、
SELECT LAST_INSERT_ID() FROM test;
のようにテーブル名を指定する方法は何か意味があるのでしょうか?

テーブル名を指定すると、テーブルにあるレコード数分
データが返却されてしまいました。。

投稿日時 - 2008-02-27 13:09:50

QNo.3814271

困ってます

質問者が選んだベストアンサー

仕様です。

  http://dev.mysql.com/doc/refman/5.1/ja/information-functions.html

----- 引用ここから
MySQL 5.1.12 以降では、LAST_INSERT_ID() ( 引数なし ) は、最も最近に実行された INSERT 文の結果として AUTO_INCREMENT カラムに正常に インサートされた、自動的に生成された最初の値を戻します。
----- 引用ここまで

投稿日時 - 2008-02-27 13:23:23

ANo.2

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.3

LAST_INSERT_ID()の仕様であることは、#1、#2さんのURLで分かると思います。

>SELECT LAST_INSERT_ID() FROM test;
>のようにテーブル名を指定する方法は何か意味があるのでしょうか?
>テーブル名を指定すると、テーブルにあるレコード数分
>データが返却されてしまいました。。

「select ~ from test」とすれば、当然、testの全行が検索されます。このとき、test表の列でなく、LAST_INSERT_ID()を指定すれば、当然、行数分、同じ値が返されることになります。

投稿日時 - 2008-02-27 16:44:57

あなたにオススメの質問