我有一个看起来像这样的数据库
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()
进行常规自动递增的方式。