Проблема
autoincrement поле в mysql всегда работает относительно максимального значения в таблице.
Пример
В таблице есть поле num, и 100 записей в таблице, где num идет непрерывно от 1 до 100. Нам нужно вставить в таблицу запись, где значение num нужно сделать, например 777, но при этом сохранить возможность автоматической вставки значений поля num, продолжая со 101.
Автоинкремент в таком случае вставит значение 778.
Решение
Решение проблемы было доверено СУБД. Для этого:- Был создан уникальный ключ для поля num
- Сделан before insert trigger для таблицы mytable
Тело триггера
BEGIN
IF NEW.num IS NULL
THEN
SET NEW.num := (SELECT t1.num + 1 AS empy.num
FROM mytable AS t1
LEFT JOIN mytable AS t2 ON t2.num = t1.num +1
WHERE t2.num IS NULL LIMIT 1);
END IF;
END
IF NEW.num IS NULL
THEN
SET NEW.num := (SELECT t1.num + 1 AS empy.num
FROM mytable AS t1
LEFT JOIN mytable AS t2 ON t2.num = t1.num +1
WHERE t2.num IS NULL LIMIT 1);
END IF;
END