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