0

自動インクリメント フィールドを持つデータベースがあります。データベースにレコードを挿入するたびに、自動インクリメント列の値を取得したいと考えています。データベースとして mysql を使用し、プログラミング言語として PHP を使用しています。mysql_insert_id() 関数を使用してみましたが、同じ時点で多数の挿入が行われている場合には適していません。

AI 列の値を取得したいのは、それぞれのレコードのファイルを保存していて、ファイルを単一のディレクトリに保存しているため、ファイル名を一意にする必要があるためです。同じことを行う他の方法はありますか?

4

5 に答える 5

2

現在の接続の最後に挿入された AI 値を返すため、mysql_insert_id() を使用しても安全です( php.netを参照)。したがって、スクリプトで INSERT クエリの直後にメソッドを呼び出す限り、スクリプトが同時に複数回実行されていても、競合状態は発生しません。

于 2012-07-22T15:55:26.127 に答える
1

単一の挿入の場合、これを単一のステートメントで実行して、正しい値を確実に取得できます

擬似コード:

$query = "INSERT INTO TABLE1 VALUES(null, 'test')";
$id = mysql_execute("$query; SELECT LAST_INSERT_ID();"

もう 1 つの方法は、手動で ID を設定することです。

1000行を追加したいとしましょう

1. query current ai value and store value

2. alter table set ai value = current + 1000;

3. make your inserts with setting ai value manually

   INSERT INTO TABLE1 VALUES ($id, 'test$id');
于 2012-07-22T15:56:12.660 に答える
0

ファイル名には uniqid() を使用します。「マイクロ秒単位の現在の時刻に基づいて、プレフィックス付きの一意の識別子を取得します。」

こちらをご覧くださいphp.net/manual/en/function.uniqid.php

于 2012-07-22T15:52:11.937 に答える
0

uniqid() を使用して一意の番号を生成し、それをテーブルに挿入して、同じ番号をファイル名に使用することもできます。

http://php.net/manual/en/function.uniqid.php

于 2012-07-22T15:53:59.317 に答える
0

SQL を使用して最後の挿入の ID を取得する別の方法:

SELECT id FROM table ORDER BY id DESC LIMIT 1
于 2012-07-22T15:56:23.260 に答える