Существующие решения работают, если вы используете автоинкремент. У меня есть ситуация, когда пользователь может определить префикс, и он должен перезапустить последовательность на 3000. Из-за этого различного префикса я не могу использовать автоинкремент, который делает last_insert_id пустым для вставок. Я решил это со следующим:
INSERT INTO seq_table (prefix, id) VALUES ('$user_prefix', LAST_INSERT_ID(3000)) ON DUPLICATE KEY UPDATE id = LAST_INSERT_ID(id + 1);
SELECT LAST_INSERT_ID();
Если префикс существует, он будет увеличивать его и заполнять last_insert_id.
Если префикс не существует, он вставит префикс со значением 3000 и заполнит last_insert_id 3000.