SQL / PHP повторно заполняют идентификаторы ключей для таблицы базы данных

#php #mysql #sql #phpmyadmin

#php #mysql #sql #phpmyadmin

Вопрос:

Допустим, у меня есть 80 записей в таблице, и я установил для нее автоматическое увеличение при заполнении таблицы. Затем я удалил 10 записей из разных позиций, и теперь у меня есть записи, которые выглядят как:

7, 8, 9, 11, 14, 16, и т.д…

Я хотел бы перенумеровать их в последовательном порядке, но не хочу делать это вручную. Как я смогу создать для них новые идентификаторы ключей на основе алфавитного порядка?

Заранее спасибо!

Комментарии:

1. Предполагая, что вы нигде не ссылаетесь на этот идентификатор, есть ли какая-либо причина для их изменения вообще?

2. Короче говоря: вы не должны. Более подробно: Вы не получаете никаких преимуществ и можете повредить свою базу данных. ИДЕНТИФИКАТОР — это идентификатор. Обычно, когда идентификатор изменяется, это означает, что это новая запись вместо измененной.

3. Я ссылаюсь на идентификатор, нужно показать # s рядом с каждой записью

Ответ №1:

Вы не хотите этого делать, и вам не нужно это делать. Это нарушает многие принципы проектирования БД и приводит к нежелательным результатам (поверьте мне в этом).

Если вам нужна последовательная нумерация чего-либо, создайте для этого триггер, НЕ полагайтесь на первичный ключ для таких целей.

Ответ №2:

В дополнение к предыдущим ответам, если вы просто ищете способ последовательной нумерации ваших строк при выводе в какое-либо представление, разве вы не можете просто сделать это динамически с помощью php?

 table: dogs
id | name 
---------
 1 | Rover
 4 | Fido
 7 | Timothy
  

Затем (модифицируется для любого цикла, который вы запускаете

 <?
$Dogs = mysql_fetch_array(your sql query);

foreach ($Dogs as $cnt => $Dog)
{
    echo ($cnt 1).": ".$Dog['name']."<br />";
}
?>
  

Выводило бы:
1: Ровер
2: Fido
3: Тимоти

Сохраняя при этом неприкосновенность индексов базы данных?