0

これには 2 つの方法があるようですが、最初の方法は次のようになります。

$result = mysql_query("SHOW TABLE STATUS LIKE 'table_name'");
$row = mysql_fetch_array($result);
$nextId = $row['Auto_increment'];
mysql_free_result($result);

$sql = mysql_query("INSERT the information you want in the main table")

次に、関連するすべてのテーブルに $nextid を外部キーとして挿入できます。

もう 1 つの方法では、最後の挿入 ID を使用します。

START TRANSACTION;
INSERT INTO files (file_id, url) VALUES (NULL, 'text.doc');
INSERT INTO grades (file_id, grade) VALUES (LAST_INSERT_ID(), 'some-grade');
COMMIT;

これらは両方ともスレッドセーフですか? IE、2 つの mysql スレッドを同時に実行する 2 つの php スクリプトがあり、それらが同時にメイン テーブルに挿入される場合、関連付けられたテーブルは正しいプライマリ ID 外部キーを受け取りますか、それとも混乱や衝突が発生する可能性がありますか?

ありがとう。

4

3 に答える 3

1

とにかくマルチユーザーセーフであるため、2番目 (またはmysql_insert_id()) を使用します。トランザクションは一貫性の理由でのみ必要であり、. さらに、改良されたデータベース アクセス ライブラリをそのまま代わりに使用する必要があります。LAST_INSERT_ID()mysqli_*()mysql_*()

于 2011-10-15T20:51:50.137 に答える
0

INSERTED_IDを使用して、最後の方が優れています。他のオプションも問題ありませんが、同じページを使用するユーザーが多いと、うまくいかない可能性があります。

それは非常にありそうもないですが。

于 2011-10-15T20:48:10.773 に答える
0

挿入操作の直後にコードが確実に起動されるようにするための last_insert_ID() を使用したトリガーは、挿入のたびにこれを実行したい場合に最適な方法だと思います。

于 2011-10-15T20:54:29.680 に答える