首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >insert into在insert into with autonumeric

insert into在insert into with autonumeric
EN

Stack Overflow用户
提问于 2013-03-20 15:34:23
回答 2查看 189关注 0票数 1

我必须像这样做两次插入:

代码语言:javascript
复制
INSERT INTO CONVERSATION (issue,...) VALUES ('Presentation',...);
INSERT INTO CONVERSATIONMESSAGES VALUES (ConversationId, 'Hello everybody',...);

在第一个表中,唯一的主键是一个自动数字字段(ConversationId),稍后我必须知道这个自动数字字段才能插入到第二个表中。

有没有办法做到这一点?例如,当我执行第一次插入时,执行一次select *,以便知道第二次插入时的情况?

非常感谢,我希望我的解释是正确的。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-03-20 15:35:24

您可以使用LAST_INSERT_ID()插入表上最后生成的自动增量,例如

代码语言:javascript
复制
INSERT INTO CONVERSATION (issue,...) VALUES ('Presentation',...);
INSERT INTO CONVERSATIONMESSAGES VALUES (LAST_INSERT_ID(), 'Hello everybody',..);

  • LAST_INSERT_ID()

但是,如果您有并发的INSERT,这有时会失败。

尝试为此创建一个存储过程,

代码语言:javascript
复制
DELIMITER $$
CREATE PROCEDURE ProcNAME(...PARAMETERS HERE...)
BEGIN
    INSERT INTO CONVERSATION (issue,...) VALUES ('Presentation',...);
    SET @lstID = (SELECT MAX(ConversationId) FROM CONVERSATION);
    INSERT INTO CONVERSATIONMESSAGES VALUES (@lstID, 'Hello..',..);
END
DELIMITER ;
票数 6
EN

Stack Overflow用户

发布于 2013-03-20 15:38:12

代码语言:javascript
复制
declare @retVal as int

INSERT INTO CONVERSATION (issue,...) VALUES ('Presentation',...);

@retval=SELECT SCOPE_IDENTITY();

INSERT INTO CONVERSATIONMESSAGES VALUES (ConversationId, 'Hello everybody',...);

您将在@revVal中获得最后插入的行号号值,以便在其他表中使用

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

https://stackoverflow.com/questions/15517782

复制
相关文章

相似问题

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