1

我必须像这样插入两个:

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

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

有什么办法吗?当我做第一个插入以知道第二个插入时,做一个选择 * 之类的东西?

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

4

2 回答 2

6

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

INSERT INTO CONVERSATION (issue,...) VALUES ('Presentation',...);
INSERT INTO CONVERSATIONMESSAGES VALUES (LAST_INSERT_ID(), 'Hello everybody',..);

但如果你有并发INSERTs,这有时会失败。

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

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 ;
于 2013-03-20T07:35:24.473 回答
0
declare @retVal as int

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

@retval=SELECT SCOPE_IDENTITY();

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

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

于 2013-03-20T07:38:11.947 回答