1

このように 2 つの挿入を行う必要があります。

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

最初のテーブルでは、唯一の PK は自動数値フィールド (ConversationId) であり、後で 2 番目のテーブルに挿入するためにこの自動数値フィールドを知る必要があります。

これを行う方法はありますか?2番目の挿入のためにそれを知るために最初の挿入を行うときにselect *を行うようなものですか?

どうもありがとうございました。正しく説明できれば幸いです。

4

2 に答える 2

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 ;
于 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 に答える