Может ли INSERT вернуть идентификатор, который не увеличивается автоматически в MySQL - PullRequest
0 голосов
/ 28 сентября 2018

У меня есть база данных, которая выглядит следующим образом

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 могут быть восстановлены)

Спасибо

1 Ответ

0 голосов
/ 28 сентября 2018

Вы можете установить пользовательскую переменную:

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

Затем вы можете использовать @last_msgId в следующих запросах в том же соединении MySQL, аналогично тому, как вы использовали бы LAST_INSERT_ID() с обычным автоматическим-increment.

...