MySQL auto increment
Материал из PhpWiki.
Как сделать, чтобы записи в таблице нумеровались «без пробоев», т.е. первичные ключи шли по порядку 1,2,3,4? Ведь когда я удаляю одну из записей, то получается что-то типа 1,2,4,5, а 3-го нет.
Вам этого не нужно! Но если вам все-таки это очень-очень нужно, то мне придется повторить: вам этого не нужно!
Первичный ключ нужен не для того, что бы по нему можно было строить красивые HTML-таблички c нумерацией и не для сортировки (см. пункт 2).
Он нужен для идентификации записей, чтобы по его значению можно было найти единственную и неповторимую запись. Он нужен для того, чтобы одна таблица могла ссылаться на другую, но не для нумерации. Забудьте, что это число, это просто уникальное значение (кстати, в большинстве других современных баз данных так и есть).
Не убедил? Тогда представьте, что есть прайс-лист. Табличка groups (группы товаров):
+----------------------------+-------------------+ | group_id INT [PRIMARY KEY] | name VARCHAR(255) | +----------------------------+-------------------+ | .......................... | ................. | +----------------------------+-------------------+
и табличка goods (товары):
+---------------------------+--------------+-------------------+ | good_id INT [PRIMARY KEY] | group_id INT | name VARCHAR(255) | +---------------------------+--------------+-------------------+ | ......................... | ............ | ................. | +---------------------------+--------------+-------------------+
Теперь мы завели товары, группы товаров, все связали между собой с помощью поля group_id в таблице goods и ушли в горы. Но вот кто-то из шефов решил убрать какую-то группу товаров. Вы её убираете, заполняете «дыры» в нумерации таблицы groups, а про то, что надо изменить все соответствующие записи в goods случайно забыли... (я тоже никогда ничего не забываю, но мало ли что бывает :)).
И начинается самое интересное – часть товаров, как всегда, самых важных, куда-то пропадает, часть волшебным образом «переносится» в другие группы. Мониторы продаются в книжном отделе, пиво в компьютерах (это, конечно, не страшно) и так далее. Да, конечно, вы все предусмотрите и ничего не забудете. Но зачем? Для того, чтобы иметь напротив каждой строки порядковый номер? Но нумеровать строки можно и нужно в скриптах. Вот простейший пример:
<? $i=1; $result = mysql_query('SELECT * FROM groups'); while($row = mysql_fetch_array($result)) { echo '<tr><td>'.$i++.'</td>...'; }
Вы не поверите. Эта «задача» действительно решается в полторы строки кода.
Copyright http://phpclub.ru/faq/