[MySQL] Увеличить AUTO_INCREMENT по условию

MySQL/PostgreSQL/SQLite/Oracle/M$SQL/....

Модератор: terminus

Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
Аватара пользователя
Alex Keda
стреляли...
Сообщения: 35461
Зарегистрирован: 2004-10-18 14:25:19
Откуда: Made in USSR
Контактная информация:

[MySQL] Увеличить AUTO_INCREMENT по условию

Непрочитанное сообщение Alex Keda » 2011-08-04 11:29:11

собсно, надо на чистом SQL увеличить AUTO_INCREMENT таблицы.

такой запрос не работает

Код: Выделить всё

ALTER TABLE `ServicesGroups` AUTO_INCREMENT=((SELECT MAX(`ID`) FROM `ServicesGroups`) + 1)
попытка нарисовать процедуру привела в тупик - запутался в prepare/execute, процедура была корректна, без ошибок выполнялась, но автоинкремент не меняла =(

процедуры нету, не сохранил, блин.

может способ проще есть - просто я не знаю?
Убей их всех! Бог потом рассортирует...

Хостинговая компания Host-Food.ru
Хостинг HostFood.ru
 

Услуги хостинговой компании Host-Food.ru

Хостинг HostFood.ru

Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/

Аватара пользователя
Electronik
капитан
Сообщения: 1593
Зарегистрирован: 2008-11-15 17:32:56
Откуда: Минск
Контактная информация:

Re: [MySQL] Увеличить AUTO_INCREMENT по условию

Непрочитанное сообщение Electronik » 2011-08-04 12:31:32

из phpmyadmin

Код: Выделить всё

ALTER TABLE  `dishs` AUTO_INCREMENT =300
Предскажем будущее hw по логам и дампу, снимем сглаз и порчу с рута, поможем придумать пароль(С)
Блог

Аватара пользователя
bagas
лейтенант
Сообщения: 922
Зарегистрирован: 2010-08-18 19:49:01
Откуда: Воронеж
Контактная информация:

Re: [MySQL] Увеличить AUTO_INCREMENT по условию

Непрочитанное сообщение bagas » 2011-08-04 14:03:07

Код: Выделить всё

ALTER TABLE `ServicesGroups` auto_increment = MAX(`ID`) + 1 
а если так
Что бы ты не делал , жизнь слишком коротка!
Блог о BSD системах.

Аватара пользователя
Electronik
капитан
Сообщения: 1593
Зарегистрирован: 2008-11-15 17:32:56
Откуда: Минск
Контактная информация:

Re: [MySQL] Увеличить AUTO_INCREMENT по условию

Непрочитанное сообщение Electronik » 2011-08-04 14:10:42

еще можно попробовать через LAST_INCREMENT_ID
Предскажем будущее hw по логам и дампу, снимем сглаз и порчу с рута, поможем придумать пароль(С)
Блог

FiL
ст. лейтенант
Сообщения: 1375
Зарегистрирован: 2010-02-05 0:21:40

Re: [MySQL] Увеличить AUTO_INCREMENT по условию

Непрочитанное сообщение FiL » 2011-08-04 20:41:55

какой тип таблицы? В MyISAM можешь выставлять его в 0. :)
You cannot reset the counter to a value less than or equal to any that have already been used. For MyISAM, if the value is less than or equal to the maximum value currently in the AUTO_INCREMENT column, the value is reset to the current maximum plus one.
Но вообще вот что пишут -
If you use "ALTER TABLE mytable AUTO_INCREMENT = N" the MySQL server will create a new table, copy all the data from the old table to the new, delete the old and then rename the new one even though there is no structural change to the table. The server response will show that all the rows have been "affected", like this:
mysql> alter table mytable auto_increment=1000000;
Query OK, 512691 rows affected (1 min 4.55 sec)
Records: 512691 Duplicates: 0 Warnings: 0

There are potential issues that may arise from the table copy, especially if you didn't expect it! I.e. is there a sufficient amount of free disk space for the second copy of the data, etc., etc..

The bottom line for me is to go back to the "old fashioned way" - just insert a dummy row and explicitly set the AUTO_INCREMENT column to N - 1, then immediately delete the dummy row. The next row that is inserted will start at N and go from there.
Но вообще это всё не ясно зачем надо. Потому как auto_increment все равно всегда берет MAX и прибавляет инкремент. Так что руками выставлять его в MAX+1 смысла не имеет.

Аватара пользователя
Alex Keda
стреляли...
Сообщения: 35461
Зарегистрирован: 2004-10-18 14:25:19
Откуда: Made in USSR
Контактная информация:

Re: [MySQL] Увеличить AUTO_INCREMENT по условию

Непрочитанное сообщение Alex Keda » 2011-08-04 22:16:38

FiL писал(а):какой тип таблицы? В MyISAM можешь выставлять его в 0. :)
я знаю. но таблица - InnoDB
FiL писал(а):Но вообще это всё не ясно зачем надо. Потому как auto_increment все равно всегда берет MAX и прибавляет инкремент. Так что руками выставлять его в MAX+1 смысла не имеет.
незнал... завтра попробую... чё-то у провайдера, блин, инет тупит со страшной силой
Убей их всех! Бог потом рассортирует...

Аватара пользователя
Alex Keda
стреляли...
Сообщения: 35461
Зарегистрирован: 2004-10-18 14:25:19
Откуда: Made in USSR
Контактная информация:

Re: [MySQL] Увеличить AUTO_INCREMENT по условию

Непрочитанное сообщение Alex Keda » 2011-08-04 22:20:26

собсно, проблема откуда выросла-то - надо на таблицу такую феню накатить:

Код: Выделить всё

UPDATE `ServicesGroups` SET `ID`=(`ID` + 1000) WHERE `ID` > 1000;
т.е. я расчищаю место от 1000 до 1999 под системные нужды - разработчики не подумали что надо будет.
а в таблице есть сколько-то записей с ID > 1000 (не больше нескольких десятков, инкремент реально < 1100 будет, на самой ушатанной системе - т.к. это разделы, а разделов мало обычно - в дефолте вообще один - и хватает 99% народа)
Убей их всех! Бог потом рассортирует...

FiL
ст. лейтенант
Сообщения: 1375
Зарегистрирован: 2010-02-05 0:21:40

Re: [MySQL] Увеличить AUTO_INCREMENT по условию

Непрочитанное сообщение FiL » 2011-08-05 0:45:18

просто накатывай и не боись. автоинкремент прыгнет на максимальное ID+1.
Какие-то телодвижения могут быть интересны для УМЕНЬШЕНИЯ счетчика. Типа если ты из 100000 строк удали 90000. Вот тогда - да, тогда надо ручками инкремент править, ибо вниз он сам не прыгнет.