我有一个看起来像这样的数据库

int groupId
int msgId
data


其中主键由groupId + msgId组成,例如,一些键是1-1、1-2、1-3、2-1、2-2、2-3等

所以当插入一个新值时,它是这样的

INSERT INTO chatMessages (msgId, groupId, ...)
SELECT MAX(msgId)+1, ?, ...
FROM chatMessages
WHERE chatMessages.groupId = ?


用我自己的自动递增的方式说出,序列号在每个组中的位置都很好。

现在,当我插入一条新消息时,有什么方法可以在不执行两个单独请求的情况下获取msgId吗? (就像auto_increment ID一样,可以检索)

谢谢

最佳答案

您可以设置用户定义的变量:

INSERT INTO chatMessages (msgId, groupId, ...)
SELECT @last_msgId := MAX(msgId)+1, ?, ...
FROM chatMessages
WHERE chatMessages.group = ?


然后,您可以在同一MySQL连接中的以下查询中使用@last_msgId,类似于使用LAST_INSERT_ID()进行常规自动递增的方式。

10-07 19:12