PDA

Просмотр полной версии : сброс auto increment


50%LameRa
07.11.2005, 20:40
при добавлении значения поля авто инкремент увеличивается на 1 по сравнению с предыдущим.
но если удалить некоторые записи например несколько последних при следующей вставке записи ее значение все равно больше последнего до удаления.
например были записи
1 ...
2 ...
3 ...
4 ...
5 ...
удалили например 3 4 5 добавили еще одну у нее значение автоинкрементного поля 6 а не 3, что и естественно.
Вот и вопрос: как сбросить или установить свое значения для счетчика поля auto incterement'a.
P.S.Извиняюсь за костлявость вопроса, торопился, но надеюсь меня поняли.

Crazy
07.11.2005, 21:42
Вопрос: нафига?

50%LameRa
08.11.2005, 01:42
да не красиво как-то когда 1 2 3 4 5 126 580 1501 1502
и перебирать не так удобно

Crazy
08.11.2005, 09:27
да не красиво как-то когда 1 2 3 4 5 126 580 1501 1502
и перебирать не так удобно

Т.е. незачем.

50%LameRa
08.11.2005, 10:52
т.е. нельзя.

Constantine
08.11.2005, 11:41
Можно не использовать auto_increment...

juggy
08.11.2005, 11:51
да не красиво как-то когда 1 2 3 4 5 126 580 1501 1502
и перебирать не так удобно
не красиво? Твоя неправда, мне вот нравится. Особенно красивая цифра — 580

Skubent
08.11.2005, 11:57
Ну, автоинкремент работает на разных СУБД по разному... Так что вопрос сродни
"а могу я машину заправить дизельным топливом ?"

Ну а судя по вопросу, автор не очень представляет себе зачем оный юзают... Рекомендую почитать теорию :)

Crazy
08.11.2005, 12:16
Ну, автоинкремент работает на разных СУБД по разному...

Навскидку не могу припомнить СУБД, где автоинкремент работает иначе.

Crazy
08.11.2005, 12:17
т.е. нельзя.

Ненужно.

50%LameRa
08.11.2005, 12:44
ну не нужно, так не нужно

Skubent
08.11.2005, 12:57
Навскидку не могу припомнить СУБД, где автоинкремент работает иначе.
Навскидку - алгоритм определения свободного id отличается в mySQL для MyISAM и BDB таблиц.

ffffff
08.11.2005, 13:12
автоинскремиент никак не изменишью можно только разбить дабавление запимсей на 2 части. 1-я SELECT MAX(id) as new_id
ну и соответственно во второй части вставлять этот id

Crazy
08.11.2005, 13:17
автоинскремиент никак не изменишью можно только разбить дабавление запимсей на 2 части. 1-я SELECT MAX(id) as new_id
ну и соответственно во второй части вставлять этот id

...и не забываем про многопользовательский режим.

andr64
08.11.2005, 13:45
а так ?

ALTER TABLE `table` AUTO_INCREMENT=<number>

Crazy
08.11.2005, 13:50
а так ?

А нафиг?

P.S. Опять же: не забываем про многопользовательский режим. Пока ты делаешь alter table -- другой пользователь уже вставил десять новых записей.

andr64
08.11.2005, 13:53
а LOCK TABLES ?

Crazy
08.11.2005, 13:55
а LOCK TABLES ?

И старые записи нельзя будет обновлять?

Главный вопрос: ЗАЧЕМ. :) Извращений-то можно придумать немало... :)

andr64
08.11.2005, 14:03
Главный вопрос: ЗАЧЕМ. :)

для красоты )

а вот что мне интересно: что будет когда поле auto_increment перевалит за "максимум"?
т.е. если его тип "int unsigned", что будет при добавлении новой записи, когда оно равно 4294967295 ?

Crazy
08.11.2005, 14:05
для красоты )

Пользователь нигде и никогда не должен иметь дело с этими значениями. :)

а вот что мне интересно: что будет когда поле auto_increment перевалит за "максимум"?

Ты просто посчитай, как долго должна работать система, чтобы это случилось. :)

andr64
08.11.2005, 14:10
Пользователь нигде и никогда не должен иметь дело с этими значениями. :)

тогда для админа Ж)

Ты просто посчитай, как долго должна работать система, чтобы это случилось. :)

а если тип tinyint ?

Crazy
08.11.2005, 14:21
а если тип tinyint ?

Это значит, что разработчика базы нужно лечить электричеством.

Skubent
08.11.2005, 14:51
Tinyint применяют иногда... Для словарей.
Разработчики утверждают, что рестарт сервера сбрасывает счетчик для автоинкремента. У меня не получилось.
А для желающих использовать tinyint(1) для таких столбцов - всегда есть два пути:
set insert_id=1;
или:
alter table bla-bla drop id;
alter table bla-bla add id TINYINT auto_increment;

А если кто скажет, что у него auto_increment TINYINT да еще и уникальный ключ в таблице - тому точно к доктору надо. И, боюсь, электричество не поможет.

Crazy
08.11.2005, 14:56
Tinyint применяют иногда...

...когда заведомо известно, что он не будет переполнен.