Страница 1 из 1

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

Добавлено: 2011-08-04 11:29:11
Alex Keda
собсно, надо на чистом SQL увеличить AUTO_INCREMENT таблицы.

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

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

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

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

может способ проще есть - просто я не знаю?

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

Добавлено: 2011-08-04 12:31:32
Electronik
из phpmyadmin

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

ALTER TABLE  `dishs` AUTO_INCREMENT =300

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

Добавлено: 2011-08-04 14:03:07
bagas

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

ALTER TABLE `ServicesGroups` auto_increment = MAX(`ID`) + 1 
а если так

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

Добавлено: 2011-08-04 14:10:42
Electronik
еще можно попробовать через LAST_INCREMENT_ID

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

Добавлено: 2011-08-04 20:41:55
FiL
какой тип таблицы? В 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 смысла не имеет.

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

Добавлено: 2011-08-04 22:16:38
Alex Keda
FiL писал(а):какой тип таблицы? В MyISAM можешь выставлять его в 0. :)
я знаю. но таблица - InnoDB
FiL писал(а):Но вообще это всё не ясно зачем надо. Потому как auto_increment все равно всегда берет MAX и прибавляет инкремент. Так что руками выставлять его в MAX+1 смысла не имеет.
незнал... завтра попробую... чё-то у провайдера, блин, инет тупит со страшной силой

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

Добавлено: 2011-08-04 22:20:26
Alex Keda
собсно, проблема откуда выросла-то - надо на таблицу такую феню накатить:

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

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

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

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