SQL

Почему id в бд идут не по порядку, при том что ни один из них не разу не удался?

  • Потому, что любая попытка вставки новой записи приводит к генерации нового значения - даже если вставка не произошла (сработало IGNORE или завершилась ошибкой).
  • Потому, что выполнение REPLACE создаёт новую запись с новым ключом - удаляя предыдущий экземпляр из таблицы.
  • И, да: хоть в этой таблице и не удалялось, но в общем случае это тоже причина.

Автоинкремент - всего лишь поле в служебной таблице, содержащей информацию о пользовательских таблицах БД, которое автоматически увеличивается на 1 при обращении к нему - независимо от того, будет использовано это значение или нет. Механизм максимально быстрый и потому предельно простой.

Смысл автоинкремента не в том, чтобы было подряд, а в том, чтобы у каждой записи таблицы было уникальное значение первичного ключа. И даже если запись была удалена из таблицы, чтобы ключ удалённой записи никогда в этой таблице не появился снова.
ДШ
Дмитрий Шагин
63 301
Лучший ответ
если почитаешь документацию СУБД на автоинкременты/sequences, то обнаружишь, что они принципиально не гарантируют непрерывности. только уникальность. иными словами, если создашь пустую таблицу и зальешь в нее, скажем, 100k строк, не проводя более никаких операций, с высокой вероятностью в последовательности будут разрывы.

почему так? основная причина, полагаю, в асинхронности. возможно, также причина есть в математическом обосновании реляционных баз данных, но это копай сам. :)
TQ
Tebi Qadjiyev
11 370
судя по скрину они идут по порядку, от меньшего к большему...
просто "порядки" у каждого свои :)
Это особенности работы каждой СУБД.
Удаляются строки и заполняются уже пустые места хаотично, по ситуации.
Иначе упала бы скорость работы при выборке.
Ualikhan Baimanov
Ualikhan Baimanov
7 402
Евгений Гайденрайх В каком смысле удаляются строки?