4

私は現在$mysqli->insert_id、新しい行が挿入されたときにMySQLテーブルから自動割り当てされた主キーを取得するために使用しています。これは、単一のインサートで正常に機能します。の単純なケースです

$result = $mysqli->query($query);
$NewPrimaryKey = $mysqli->insert_id;

ただし、(実際にはこのサイトから)拡張挿入を使用した方が複数の挿入を行う方がよいことを学びました。

insert into table (name1,name2,name3) values 
('blah1','blah2',blah3'), 
('blah1','blah2',blah3'), 
('blah1','blah2',blah3'))

これもうまく機能します。ただし、どのキーが自動割り当てされたかを知りたい場合を除きます。

PHPマニュアルには次のように書かれています。

AUTO_INCREMENTフィールドを持つテーブルで拡張挿入を実行する場合、mysqli_insert_id()の値は最初に 挿入された行の値と等しくなります。

私のテストはこれを確認しているようです。

注:最初または最後だけは必要ありません。

auto_allocatedキーを個別に取得できるようにするためだけに、何千もの単一挿入に戻す必要はありません。

拡張挿入を実行し、(おそらく配列で)割り当てられたすべてのキーを取り戻す方法を知っている人はいますか?

拡張書き込みを実行する前に、最新の既存のキーを読み取って保持し、割り当てられたキーの期待値を計算することは私には思い浮かびましたが、これは少し厄介なようです。

4

2 に答える 2

0

新しく挿入されたすべての行 ID を取得できるとは思いませんが、最初のinsert_idIDが返された場合、挿入された ID はその ID から挿入数までの範囲であると想定できます (何かがうまくいかない場合、それはアトミックであるため、挿入全体が失敗するはずです)。new 以上の auto_increment ID をすべて選択することもできます。insert_id

于 2013-03-08T15:16:43.987 に答える