Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   Серверные технологии и Flash (http://www.flasher.ru/forum/forumdisplay.php?f=62)
-   -   сброс auto increment (http://www.flasher.ru/forum/showthread.php?t=71527)

50%LameRa 07.11.2005 20:40

сброс auto increment
 
при добавлении значения поля авто инкремент увеличивается на 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

Цитата:

Сообщение от 50%LameRa
да не красиво как-то когда 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

Цитата:

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

не красиво? Твоя неправда, мне вот нравится. Особенно красивая цифра — 580

Skubent 08.11.2005 11:57

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

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

Crazy 08.11.2005 12:16

Цитата:

Сообщение от Skubent
Ну, автоинкремент работает на разных СУБД по разному...

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

Crazy 08.11.2005 12:17

Цитата:

Сообщение от 50%LameRa
т.е. нельзя.

Ненужно.

50%LameRa 08.11.2005 12:44

ну не нужно, так не нужно

Skubent 08.11.2005 12:57

Цитата:

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

Навскидку - алгоритм определения свободного 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

Цитата:

Сообщение от ffffff
автоинскремиент никак не изменишью можно только разбить дабавление запимсей на 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

Цитата:

Сообщение от andr64
а так ?

А нафиг?

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

andr64 08.11.2005 13:53

а LOCK TABLES ?

Crazy 08.11.2005 13:55

Цитата:

Сообщение от andr64
а LOCK TABLES ?

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

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

andr64 08.11.2005 14:03

Цитата:

Сообщение от Crazy
Главный вопрос: ЗАЧЕМ. :)

для красоты )

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

Crazy 08.11.2005 14:05

Цитата:

Сообщение от andr64
для красоты )

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

Цитата:

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

andr64 08.11.2005 14:10

Цитата:

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

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

Цитата:

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

а если тип tinyint ?

Crazy 08.11.2005 14:21

Цитата:

Сообщение от andr64
а если тип 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

Цитата:

Сообщение от Skubent
Tinyint применяют иногда...

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


Часовой пояс GMT +4, время: 19:41.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.