@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?
  • Вопрос задан
  • 266 просмотров
Пригласить эксперта
Ответы на вопрос 2
martin74ua
@martin74ua Куратор тега MySQL
Linux administrator
Перестать заниматься ерундой ;)
Перестать обращать внимание на дырки в автоинкременте и заняться логикой приложения.
Ответ написан
402d
@402d
начинал с бейсика на УКНЦ в 1988
автоинкремент может иметь шаг более 1. нр репликация мастер-мастер. Инсерт он дупликате апдейт тоже его увеличивает даже в случае апдейта. борьба с дырками бесмысленна
Ответ написан
Ваш ответ на вопрос

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

Похожие вопросы
23 нояб. 2024, в 01:31
1000 руб./за проект
23 нояб. 2024, в 00:16
2000 руб./за проект
22 нояб. 2024, в 23:55
3000 руб./за проект