Задать вопрос
@Evasium09

Как упорядочить id записей в MySQL?

К примеру, есть 3 записи, в каждой Id ([id’s]: 1,2,3). Если я удалю одну запись, и создам новую, у неё id будет уже 4, и будет выглядить это так ([id’s]: 1,2,4). Как через php, или бд можно сделать так чтобы id записей упорядочивались, тоесть были ([id’s]: 1,2,3)
  • Вопрос задан
  • 342 просмотра
Подписаться 1 Простой 4 комментария
Решения вопроса 1
Варианты:
1) Перед удалением записи узнать её id. Вставить новую запись с указанным id.
2) Удаляя запись, записывать её id в другую таблицу - отдельную таблицу для id.
При вставке новой записи, смотреть есть ли в таблице для id айди.
Если есть - вставлять новую запись с указанным id (и удалить этот id из таблицы для id). Иначе вставлять запись с автоинкрементным айди.

PS
Id обычно первичный ключ. Нельзя вот так просто сдвинуть ключи т.к. одна запись удалилась.
Поэтому и создается новый id, например 4, когда до этого удалили 3.
По идее в бд сейчас айди 1 и 2 и 3 свободен. Но не известно на что ссылался этот ключ, на какие таблицы.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@Akina
Сетевой и системный админ, SQL-программист.
Если речь об автоинкрементном поле-первичном ключе, то забудь про сию хотелку, и чем скорее, тем лучше.

PRIMARY KEY выполняет в таблице только одну функцию - однозначно идентифицирует запись. В нормальных условиях значение такого поля используется исключительно для связывания данных (установления соответствия), и надобности видеть значение этого поля не существует в принципе.

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

В общем, надо тебе поле-нумератор? создай для этого дела ещё одно поле, просто числовое, не автоинкремент, и заполняй программно. А ещё лучше - организуй односвязный список, и нумеруй прямо в запросе на получение данных.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы