0

所以我想用一个公共列“messageID”链接两个表。所以首先我插入表 1 以获取自动递增的 id,然后使用 LAST_INSERT_ID 函数获取该 ID,并将其作为表 2 的 id:

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

但我担心的是,可能有两个用户同时运行这个脚本,所以在两个查询之间的几毫秒内执行的LAST_INSERT_ID可能已经改变,所以现在两个 id 是不同的。有什么办法可以防止这种可能性。我知道不可能通过一个查询插入两个表,这是我的第一个想法。任何想法都非常感谢。谢谢

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 回答