СУБД под BSD/UNIX: PostgreSQL, MySQL и другие. Установка, настройка, репликация, резервное копирование и оптимизация.
Модератор: terminus
Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
-
Alex Keda
- стреляли...
- Сообщения: 35501
- Зарегистрирован: 2004-10-18 14:25:19
- Откуда: Made in USSR
-
Контактная информация:
Непрочитанное сообщение
Alex Keda » 2011-08-04 11:29:11
собсно, надо на чистом SQL увеличить AUTO_INCREMENT таблицы.
такой запрос не работает
Код: Выделить всё
ALTER TABLE `ServicesGroups` AUTO_INCREMENT=((SELECT MAX(`ID`) FROM `ServicesGroups`) + 1)
попытка нарисовать процедуру привела в тупик - запутался в prepare/execute, процедура была корректна, без ошибок выполнялась, но автоинкремент не меняла =(
процедуры нету, не сохранил, блин.
может способ проще есть - просто я не знаю?
Убей их всех! Бог потом рассортирует...
Alex Keda
-
Хостинг HostFood.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
- Откуда: Минск
-
Контактная информация:
Непрочитанное сообщение
Electronik » 2011-08-04 12:31:32
Предскажем будущее hw по логам и дампу, снимем сглаз и порчу с рута, поможем придумать пароль(С)
Блог
Electronik
-
bagas
- лейтенант
- Сообщения: 922
- Зарегистрирован: 2010-08-18 19:49:01
- Откуда: Воронеж
-
Контактная информация:
Непрочитанное сообщение
bagas » 2011-08-04 14:03:07
Код: Выделить всё
ALTER TABLE `ServicesGroups` auto_increment = MAX(`ID`) + 1
а если так
bagas
-
Electronik
- капитан
- Сообщения: 1593
- Зарегистрирован: 2008-11-15 17:32:56
- Откуда: Минск
-
Контактная информация:
Непрочитанное сообщение
Electronik » 2011-08-04 14:10:42
еще можно попробовать через LAST_INCREMENT_ID
Предскажем будущее hw по логам и дампу, снимем сглаз и порчу с рута, поможем придумать пароль(С)
Блог
Electronik
-
FiL
- ст. лейтенант
- Сообщения: 1377
- Зарегистрирован: 2010-02-05 0:21:40
Непрочитанное сообщение
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 смысла не имеет.
FiL
-
Alex Keda
- стреляли...
- Сообщения: 35501
- Зарегистрирован: 2004-10-18 14:25:19
- Откуда: Made in USSR
-
Контактная информация:
Непрочитанное сообщение
Alex Keda » 2011-08-04 22:16:38
FiL писал(а):какой тип таблицы? В MyISAM можешь выставлять его в 0.

я знаю. но таблица - InnoDB
FiL писал(а):Но вообще это всё не ясно зачем надо. Потому как auto_increment все равно всегда берет MAX и прибавляет инкремент. Так что руками выставлять его в MAX+1 смысла не имеет.
незнал... завтра попробую... чё-то у провайдера, блин, инет тупит со страшной силой
Убей их всех! Бог потом рассортирует...
Alex Keda
-
Alex Keda
- стреляли...
- Сообщения: 35501
- Зарегистрирован: 2004-10-18 14:25:19
- Откуда: Made in USSR
-
Контактная информация:
Непрочитанное сообщение
Alex Keda » 2011-08-04 22:20:26
собсно, проблема откуда выросла-то - надо на таблицу такую феню накатить:
Код: Выделить всё
UPDATE `ServicesGroups` SET `ID`=(`ID` + 1000) WHERE `ID` > 1000;
т.е. я расчищаю место от 1000 до 1999 под системные нужды - разработчики не подумали что надо будет.
а в таблице есть сколько-то записей с ID > 1000 (не больше нескольких десятков, инкремент реально < 1100 будет, на самой ушатанной системе - т.к. это разделы, а разделов мало обычно - в дефолте вообще один - и хватает 99% народа)
Убей их всех! Бог потом рассортирует...
Alex Keda
-
FiL
- ст. лейтенант
- Сообщения: 1377
- Зарегистрирован: 2010-02-05 0:21:40
Непрочитанное сообщение
FiL » 2011-08-05 0:45:18
просто накатывай и не боись. автоинкремент прыгнет на максимальное ID+1.
Какие-то телодвижения могут быть интересны для УМЕНЬШЕНИЯ счетчика. Типа если ты из 100000 строк удали 90000. Вот тогда - да, тогда надо ручками инкремент править, ибо вниз он сам не прыгнет.
FiL