首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >一种更可靠的LAST_INSERT_ID解决方案

一种更可靠的LAST_INSERT_ID解决方案
EN

Stack Overflow用户
提问于 2013-10-16 19:31:57
回答 2查看 93关注 0票数 0

因此,我想将两个表与一个公共列"messageID“链接起来。因此,首先我插入表1以获得自动递增的id,然后将带有LAST_INSERT_ID函数的ID作为表2的id:

代码语言:javascript
复制
$db->("INSERT INTO table_1 VALUES('','$message')");
$db->("INSERT INTO table_2 VALUES(LAST_INSERT_ID(),'$message');

但是我担心的是,可能有两个用户同时运行这个脚本,所以在两个查询之间的几毫秒内,LAST_INSERT_ID可能已经改变了,所以现在这两个id是不同的。我有没有办法阻止这种可能性。我知道不可能用一个查询将两个表插入,这是我的第一想法。任何想法都很受欢迎。谢谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-10-16 19:33:16

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

票数 6
EN

Stack Overflow用户

发布于 2013-10-16 19:43:48

您可以尝试使用scope_identity,如下所示:

代码语言:javascript
复制
$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');

代码语言:javascript
复制
$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的值。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19412130

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档