То, что вы видите, на самом деле не исключение, а то, как ведут себя столбцы автоинкремента в базах данных. Контракт для столбца с автоинкрементом заключается в том, что когда добавляется новый id
, он последовательно следует предыдущему наибольшему значению и , что все значения id
гарантированно будут уникальными. Нет гарантии, что последовательность будет непрерывной.
Если вам требуется непрерывная последовательность, то вы можете использовать аналитическую функцию ROW_NUMBER
(MySQL 8+ и более поздние версии):
SELECT *, ROW_NUMBER() OVER (ORDER BY num_id) rn
FROM web_file;
В более ранней версии MySQL вы могли использовать коррелированный подзапрос:
SELECT *,
(SELECT COUNT(*) FROM web_file w2 WHERE t2.num_id <= t1.num_id) rn
FROM web_file t1;