0
0

в phpmyadmin удалил несколько строк и теперь произошел сбой автоматического назначения номера id очередной строке таблицы. Например: было 10 строк, 5 удалил, а после ввода новой строки (по логике шестой!) ей присваивается номер 11. Получается, происходит запоминание всех вводимых ранее строк и новой присваивается на единицу больше последней вводимой строки (пусть даже удаленной), а не порядковый номер исходя из действующих строк.

Помогите, пожалуйста. Заранее благодарен!

Александр


александр миронов
2 years ago






Как раз так работает автоматическое присвоение id записи - у вас в базе/таблице установлен для поля id параметр AUTO_INCREMENT - вы можете это увидеть если нажмете вкладку Структура для таблицы.

Изменить автоматически присваиваемый номер, можно вручную в параметрах таблицы - вкладка Операции -> Параметры таблицы -> поле AUTO_INCREMENT

Цвелом погуглите на эту тему Auto Increment и как оно работает, чтобы понять как с ним работать не вручную а через код, если нужно и т.д..

Но как я понимаю, что например у вас несколько таблиц взаимосявязанных. И вы например удалили запись из одной талицы, но при этом для нее остались связанные данные в других таблицах. И поэтому те же id удаленных записей лучше не использовать, так как могут возникнуть ошибочные данные, т.е. новая запись привяжется к старым данным оставшимся от удаленной записи. Поэтому AUTO_INCREMENT по умолчанию работает так чтобы не было таких пересечений и номера ID удаленных записей не использует при создании новых.

Михаил К
2 years ago

Спасибо, Михаил! Обязательно посмотрю дополнительно про AUTO_INCREMENT. Получается, можно не париться по поводу нумерации, главное, чтобы шло по нарастанию. Т.е. это нормально, если за номером 10 встанет номер 15, и пропуски id  номеров не скажутся на работе БД?

Еще раз спасибо!

александр миронов
2 years ago

Вот например, у вас в базе таблица 10 фильмов и есть таблица лога, куда собираются данные просмотров страниц фильмов - т.е. в лог пишутся все просмотры с указанием id фильма. Вы удаляете из таблицы фильм c id=10, при этом в логе - записи эти решили оставить (c id_film=10). 

Если вы далее начнете добавлять новые фильмы не с 11, а с удаленного id=10. То вся статистика из лога по удаленному фильму будет считаться к новому добавленному фильму с таким же id=10, а это неверно. Можно конечно чистить таблицу фильмов с удалением всех взаимосвязанных записей в других таблицах. Тут разные ньюансы. Поэтому лучше продолжать нумерацию с 11, как предлагает Auto_increment. Но при необходимости, вы можете вручную переназначить его. Если например что-то тестировали, потом очистили всю базу, то нумерацию выставить на 0. 

Михаил К
2 years ago

Спасибо! Проще отдать все на откуп AUTO_INCREMENT!

александр миронов
2 years ago

4 ответов