2016-05-22 1 views
0

私はこのStackOverflow質問の1番目の答えにある興味深い解決策を見つけました:1st answer 問題は期待通りに機能しないということです。私のテーブルが空の場合、最初の一括挿入は正しく動作しますが、LAST_INSERT_IDは、バルクが100行を挿入したときに1を返します。私はそれを変更し、100を挿入すると簡単にそれが動作します。 autoinc_loc_modeは1に設定されます。MysqlバッチインサートはLAST_INSERT_IDを更新しません

変更する設定はありますか?

答えて

1

予想される動作です。 from MySQL docs:あなたは、単一のINSERTステートメントを使用して複数の行を挿入する場合

、 LAST_INSERT_ID()が最初に挿入 行に対して生成された値を返します。これは、他のサーバに対して簡単に同じINSERT文を再現できるようにするためです。

+0

ああ。あなたは基本的にリンクされた答えが逆さまに書かれていることを私に伝えています。 -n – maugch

+0

の@mobinoobの代わりにlast_insert_id()+ nを実行する必要があります。これはlast_insert_id()で何をしたいかによって異なります(問題があって解決策を見つけただけです)。挿入したばかりのデータにアクセスするには、通常last_insert_idが必要です。 last_insert_id()+ nは大部分の時間ではほとんど使用されません。 max(id)を知りたいですか? – Solarflare

+0

@Solarflare申し訳ありませんが、あなたはリンクされた質問をチェックする必要があります。私は似たようなことをしなければならない。 Javaプログラムが挿入をビルドします。 last_insert_idは、その解決策で既知のIDとして使用され、各ステップごとに減分されます。これら2つの一括挿入を構築するforeach()ループを想像してみてください。解決策はdo X挿入か、それをlast_insert_id + Nに変換することです。 – maugch

関連する問題