アプリ版:「スタンプのみでお礼する」機能のリリースについて

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;
のようにテーブル名を指定する方法は何か意味があるのでしょうか?

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

A 回答 (3件)

仕様です。



  http://dev.mysql.com/doc/refman/5.1/ja/informati …

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

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



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

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

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!