Прежде всего, какое преимущество вы пытаетесь получить, повторно используя пропущенные значения?Обычный INT UNSIGNED
позволит вам сосчитать до 4 294 967 295.С «миллионами записей» ваша база данных должна была бы вырасти в тысячу раз, прежде чем закончатся действительные идентификаторы.(А затем использование BIGINT UNSIGNED
приведет к увеличению до 18 446 744 073 709 551 615 значений.)
Попытка перезапустить значения, которые MySQL пропустил, вероятно, потребует много вашего времени, пытаясь компенсировать то, что на самом деле неВо-первых, беспокоить MySQL.
С учетом сказанного вы можете найти пропущенные идентификаторы с чем-то вроде:
SELECT id + 1
FROM the_table
WHERE NOT EXISTS (SELECT 1 FROM the_table t2 WHERE t2.id = the_table.id + 1);
Это позволит найти только пропущенное число first вкаждая последовательность (например, если у вас есть {1, 2, 3, 8, 10}
, она найдет {4,9}
), но она, вероятно, будет эффективной, и, конечно, после ввода идентификатора вы всегда можете запустить ее снова.