我必须像这样插入两个:
INSERT INTO CONVERSATION (issue,...) VALUES ('Presentation',...);
INSERT INTO CONVERSATIONMESSAGES VALUES (ConversationId, 'Hello everybody',...);
在第一个表中,唯一的PK是自动数字字段(ConversationId),稍后我必须知道要在第二个表中插入的自动数字字段。
有没有办法做到这一点?像我做第一个插入时选择*做第二个插入来知道它吗?
非常感谢,我希望我能正确解释。
答案 0 :(得分:6)
您可以使用LAST_INSERT_ID()
在表格中插入最后生成的自动增量,例如
INSERT INTO CONVERSATION (issue,...) VALUES ('Presentation',...);
INSERT INTO CONVERSATIONMESSAGES VALUES (LAST_INSERT_ID(), 'Hello everybody',..);
但如果您有并发INSERT
,则有时会失败。
尝试为此创建存储过程
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 ;
答案 1 :(得分:0)
declare @retVal as int
INSERT INTO CONVERSATION (issue,...) VALUES ('Presentation',...);
@retval=SELECT SCOPE_IDENTITY();
INSERT INTO CONVERSATIONMESSAGES VALUES (ConversationId, 'Hello everybody',...);
您将在@revVal中获取最后一个插入的行数值,以便在其他表中使用