テーブルにデータを挿入したい
(id PK autoincrement, val)
マルチインサートを使用して
INSERT INTO tab (val) VALUES (1), (2), (3)
最後に挿入されたIDのテーブルを取得することは可能ですか?
すべてがこの形式になるかどうかわからないので、私は尋ねています:(n、n + 1、n + 2)。
私はmysqlinodbを使用しています。
mysqlドキュメントから:
単一のINSERTステートメントを使用して複数の行を挿入する場合、LAST_INSERT_ID()は、最初に挿入された行に対してのみ生成された値を返します。これは、他のサーバーに対して同じINSERTステートメントを簡単に再現できるようにするためです。
mysqlフォーラムで同じ質問をしている人がいますが、本当に信頼できる答えはありません。安全のため、最初にテーブルをロックしてください。次に、シーケンシャルなIDを数えることができます。
私のアドバイスはこれです:
多くの行を挿入していて、他のスレッドをブロックしてもかまわない場合は、テーブルをロックし、挿入を行ってから、ロックを解除します。テーブルがロックされているので、挿入されたIDがシーケンシャル(または自動インクリメント設定が何であれ)であることを期待できます。
少数の挿入を実行している場合、または他のスレッドをブロックしたくない場合は、一度に1つずつ実行し、それぞれの後にlast_insert_id()を呼び出します。