LAST_INSERT_ID的更可靠的解决方案

时间:2013-10-16 19:31:57

标签: php mysql

所以我想用公共列“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是不同的。有什么办法可以防止这种可能性。我知道用一个查询插入两个表是不可能的,这是我的第一个想法。任何想法都非常感激。谢谢

2 个答案:

答案 0 :(得分:6)

LAST_INSERT_ID是连接会话的本地,因此它不会与插入的其他用户冲突。

答案 1 :(得分: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

的值