4

テーブルにデータを挿入したい

(id PK autoincrement, val)

マルチインサートを使用して

INSERT INTO tab (val) VALUES (1), (2), (3) 

最後に挿入されたIDのテーブルを取得することは可能ですか?

すべてがこの形式になるかどうかわからないので、私は尋ねています:(n、n + 1、n + 2)。

私はmysqlinodbを使用しています。

4

2 に答える 2

2

mysqlドキュメントから:

単一のINSERTステートメントを使用して複数の行を挿入する場合、LAST_INSERT_ID()は、最初に挿入された行に対してのみ生成された値を返します。これは、他のサーバーに対して同じINSERTステートメントを簡単に再現できるようにするためです。

于 2010-05-21T14:50:04.037 に答える
1

mysqlフォーラムで同じ質問をしている人がいますが、本当に信頼できる答えはありません安全のため、最初にテーブルをロックしてください。次に、シーケンシャルなIDを数えることができます。

私のアドバイスはこれです:

多くの行を挿入していて、他のスレッドをブロックしてもかまわない場合は、テーブルをロックし、挿入を行ってから、ロックを解除します。テーブルがロックされているので、挿入されたIDがシーケンシャル(または自動インクリメント設定が何であれ)であることを期待できます。

少数の挿入を実行している場合、または他のスレッドをブロックしたくない場合は、一度に1つずつ実行し、それぞれの後にlast_insert_id()を呼び出します。

于 2010-05-21T15:03:04.707 に答える