0

そのため、共通の列「messageID」で2つのテーブルをリンクしたいと考えています。最初にテーブル 1 に挿入して自動インクリメント ID を取得し、次にその ID を LAST_INSERT_ID 関数で取得し、それをテーブル 2 の ID として指定します。

$db->("INSERT INTO table_1 VALUES('','$message')");
$db->("INSERT INTO table_2 VALUES(LAST_INSERT_ID(),'$message');

しかし、ここで私の懸念は、このスクリプトを同時に実行している 2 人のユーザーがいる可能性があるため、実行中の 2 つのクエリ間の数ミリ秒でLAST_INSERT_ID変更された可能性があるため、2 つの ID が異なることです。この可能性を防ぐ方法はありますか。最初に考えたのは、1 つのクエリで 2 つのテーブルに挿入できないことです。どんなアイデアでも大歓迎です。ありがとうございました

4

2 に答える 2

6

LAST_INSERT_ID は接続セッションに対してローカルであるため、挿入を行う別のユーザーと競合しません。

于 2013-10-16T19:33:16.107 に答える
1

次のような scope_identity を使用してみてください。

$db->("DECLARE @LAST_ID int
INSERT INTO table_1 VALUES('','$message')"
SET @LAST_ID = SCOPE_IDENTITY()
);

$arg = ... $myARR['LAST_ID'] ... //however you want to get the LAST_ID from your query to PHP here

$db->("INSERT INTO table_2 VALUES(@arg,'$message');

また

$db->("DECLARE @LAST_ID int
INSERT INTO table_1 VALUES('','$message')"
SET @LAST_ID = SCOPE_IDENTITY()
INSERT INTO table_2 VALUES(@LAST_ID,'$message')
);

LAST_ID は、自動インクリメント ID の値になります。

于 2013-10-16T19:43:48.687 に答える