Просмотр полной версии : сброс 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.Извиняюсь за костлявость вопроса, торопился, но надеюсь меня поняли.
50%LameRa
08.11.2005, 01:42
да не красиво как-то когда 1 2 3 4 5 126 580 1501 1502
и перебирать не так удобно
да не красиво как-то когда 1 2 3 4 5 126 580 1501 1502
и перебирать не так удобно
Т.е. незачем.
50%LameRa
08.11.2005, 10:52
т.е. нельзя.
Constantine
08.11.2005, 11:41
Можно не использовать auto_increment...
да не красиво как-то когда 1 2 3 4 5 126 580 1501 1502
и перебирать не так удобно
не красиво? Твоя неправда, мне вот нравится. Особенно красивая цифра — 580
Ну, автоинкремент работает на разных СУБД по разному... Так что вопрос сродни
"а могу я машину заправить дизельным топливом ?"
Ну а судя по вопросу, автор не очень представляет себе зачем оный юзают... Рекомендую почитать теорию :)
Ну, автоинкремент работает на разных СУБД по разному...
Навскидку не могу припомнить СУБД, где автоинкремент работает иначе.
50%LameRa
08.11.2005, 12:44
ну не нужно, так не нужно
Навскидку не могу припомнить СУБД, где автоинкремент работает иначе.
Навскидку - алгоритм определения свободного id отличается в mySQL для MyISAM и BDB таблиц.
автоинскремиент никак не изменишью можно только разбить дабавление запимсей на 2 части. 1-я SELECT MAX(id) as new_id
ну и соответственно во второй части вставлять этот id
автоинскремиент никак не изменишью можно только разбить дабавление запимсей на 2 части. 1-я SELECT MAX(id) as new_id
ну и соответственно во второй части вставлять этот id
...и не забываем про многопользовательский режим.
а так ?
ALTER TABLE `table` AUTO_INCREMENT=<number>
а так ?
А нафиг?
P.S. Опять же: не забываем про многопользовательский режим. Пока ты делаешь alter table -- другой пользователь уже вставил десять новых записей.
а LOCK TABLES ?
И старые записи нельзя будет обновлять?
Главный вопрос: ЗАЧЕМ. :) Извращений-то можно придумать немало... :)
Главный вопрос: ЗАЧЕМ. :)
для красоты )
а вот что мне интересно: что будет когда поле auto_increment перевалит за "максимум"?
т.е. если его тип "int unsigned", что будет при добавлении новой записи, когда оно равно 4294967295 ?
для красоты )
Пользователь нигде и никогда не должен иметь дело с этими значениями. :)
а вот что мне интересно: что будет когда поле auto_increment перевалит за "максимум"?
Ты просто посчитай, как долго должна работать система, чтобы это случилось. :)
Пользователь нигде и никогда не должен иметь дело с этими значениями. :)
тогда для админа Ж)
Ты просто посчитай, как долго должна работать система, чтобы это случилось. :)
а если тип tinyint ?
а если тип tinyint ?
Это значит, что разработчика базы нужно лечить электричеством.
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 да еще и уникальный ключ в таблице - тому точно к доктору надо. И, боюсь, электричество не поможет.
Tinyint применяют иногда...
...когда заведомо известно, что он не будет переполнен.
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.