@immelnikoff
Изучаю БД

Как сделать так, чтобы не было пропусков в сгенерированных значениях автоинкрементного первичного ключа?

В MySQL 5.7 имеется InnoDB-таблица с автоинкрементным суррогатным первичным ключом: id INT UNSIGNED NOT NULL AUTO_INCREMENT. В эту таблицу некоторое приложение пишет данные через хранимую функцию в однопоточном режиме, производя записи в таблицу одна за одной. Как сделать, чтобы не было пропусков в сгенерированных значениях id (за работу внешнего приложения я не отвечаю, а оно может попытаться записать в таблицу данные, не проходящие валидацию)?
Хранимая функция, через которую приложение пишет в таблицу БД выглядит следующим образом:
CREATE FUNCTION insert_material (n VARCHAR(255), d DATE) RETURNS INT UNSIGNED
BEGIN
INSERT INTO Material(name, date) VALUE(n, d);
RETURN LAST_INSERT_ID();
END

Как наиболее просто модифицировать эту функцию, чтобы гарантировать отсутствие пропусков в генерируемых значениях id?
  • Вопрос задан
  • 261 просмотр
Пригласить эксперта
Ответы на вопрос 2
martin74ua
@martin74ua Куратор тега MySQL
Linux administrator
Перестать заниматься ерундой ;)
Перестать обращать внимание на дырки в автоинкременте и заняться логикой приложения.
Ответ написан
@402d
начинал с бейсика на УКНЦ в 1988
автоинкремент может иметь шаг более 1. нр репликация мастер-мастер. Инсерт он дупликате апдейт тоже его увеличивает даже в случае апдейта. борьба с дырками бесмысленна
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы