Создайте еще одну таблицу с одной строкой и столбцом, в котором хранится следующее значение id. Затем создайте триггер insert в исходной таблице, который увеличивает значение во второй таблице, захватывает его и использует для столбца ID в первой таблице. Вам нужно быть осторожным с тем, как вы делаете выбор и обновление, чтобы обеспечить их атомарность.
По сути, вы эмулируете Oracle sequence
в MySQL. Это приведет к блокировке одной строки в таблице последовательностей, так что это может сделать ее неприемлемой для того, что вы делаете.
ETA:
Другой подобный, но, возможно, лучший вариант исполнительская бы создать вторую «последовательность» таблицу, которая только имеет один автоинкрементируемого столбец PK и никакие другие данные. Попросите триггер вставить строку в эту таблицу и используйте сгенерированный идентификатор оттуда, чтобы заполнить идентификатор в исходной таблице. Затем либо триггер, либо другой процесс периодически удаляют все строки из таблицы последовательностей, чтобы очистить его.