Другие языки программирования и технологии

Авто инкремент в mySQL ?

У меня к примеру есть 5 строк (id 1-5), я их удаляю. Добавляю новую строку и авто инкремент присваивает ей id 6 (при том что это единственная строка в таблице) . Как сделать что бы он правильно нумеровал их. Т. е. новой строке давал id1 если она первая?
Первичные ключи бывают суррогатные и не суррогатные.

К примеру не суррогатный ключ.
В таблице "Города" 2 колонки ID и Наименование.
MSK, Москва
SPB, Санкт-Петербург

Или как вы хотите - 1,2.

Какие проблемы применения таких ключей?
У вас есть 1,2,3,4,5 города.
Вы удалили город 3. И стало
1,2,4,5.
Следовательно 4 и 5 должны будут быть отредактированы.
На них ссылается тьма тьмущая строк. Все связанные внешние ключи тоже должны будут быть откорректированы!! !

Поэтому не надо заморачиваться.
Ставите генератор и он считает 1,2,3,4,5, ..
Суррогатные ключи очень удобны, и не несут никакого смысла кроме как физического идентификатора. Внешние ключи лучше не редактировать.

А если вам нужно пронумеровать города - ну сделайте это из хранимой процедуры, добавьте колонку "порядковый номер".
Либо непосредственно в запросе получающем выборку делайте нумерацию строк. Либо если вы выводите строки в таблицу - нумеруйте их при получении из базы.
Dima. Karpov
Dima. Karpov
10 716
Лучший ответ
искать id самому и назначать его вручную.
вообще никогда не стоит уповать на то, что эти id будут идти по порядку. сейчас это так, да, но, по сути, mysql гарантирует только уникальность поля с ключом, а не порядок значений.
Андрей Гурома
Андрей Гурома
87 362
Дропай поле автоинкремент и создавай его заново например.
смысла правда 0
ALTER TABLE table DROP `id`;
ALTER TABLE table ADD `id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY FIRST;
ALTER TABLE table ADD INDEX (`id`);
Если для красоты чтоб при селекте была норм нумирация делай по другому, добавляй при селекте ещё поле и там через переменные на скок я помню номируй
TRUNCATE TABLE `Ваша_Таблица`
**
***** *****
2 345