изменение значения автоматического приращения на основе последнего введенного идентификатора

#mysql #sql

#mysql #sql

Вопрос:

Я пытаюсь изменить значение автоматического приращения в MySQL с помощью запроса

 ALTER TABLE log_visit AUTO_INCREMENT = (
    SELECT `AUTO_INCREMENT`   500000
    FROM  INFORMATION_SCHEMA.TABLES
    WHERE TABLE_SCHEMA = 'test'
        AND TABLE_NAME = 'visit'
);
  

но этот запрос вообще не работает.

Пожалуйста, дайте мне знать, что нужно сделать, если мы хотим изменить автоматическое приращение на основе последнего введенного значения.

Комментарии:

1. Описать «вообще не работает». Вы получаете сообщение об ошибке? Если да, то что?

2. ОШИБКА 1064 (42000): у вас ошибка в синтаксисе SQL; проверьте руководство, соответствующее вашей версии сервера MySQL, на предмет правильного синтаксиса для использования рядом ‘( ВЫБЕРИТЕ AUTO_INCREMENT 500000 ИЗ INFORMATION_SCHEMA. ТАБЛИЦЫ W’ в строке 1

Ответ №1:

Вы получаете ошибку SQL, это связано с тем, что столбец не имеет имени «AUTO_INCREMENT» (и вы также не можете выполнить select внутри запроса ALTER). Причина в том, что AUTO_INCREMENT — это не столбец, а атрибут MySQL, который, очевидно, автоматически увеличивается.

Если вы хотите, чтобы АВТО_ИНКРЕМЕНТ начинался с определенного значения, в данном случае 500000, вам нужно будет изменить таблицу следующим образом:

 ALTER TABLE `yourtable` AUTO_INCREMENT=500000;
  

Но рекомендуется, чтобы, если вы вообще собираетесь изменять столбец ID, вы должны сделать это во время создания таблицы.

Комментарии:

1. Я даже пытался написать процедуру mysql, чтобы добиться динамического изменения автоматического приращения, но у меня все равно это не работает.

2. mysql> СОЗДАТЬ ПРОЦЕДУРУ RESETSEQ() -> НАЧАТЬ -> ОБЪЯВИТЬ last_id без знака По УМОЛЧАНИЮ 0; -> ОБЪЯВИТЬ текст SQLText; -> ВЫБЕРИТЕ AUTO_INCREMENT 500000 в last_id ИЗ INFORMATION_SCHEMA. ТАБЛИЦЫ, ГДЕ TABLE_SCHEMA = ‘test’ И TABLE_NAME = ‘testtable’; -> ВЫБЕРИТЕ last_id; -> УСТАНОВИТЕ @sql_text = ‘ALTER TABLE testtable AUTO_INCREMENT = ?’; -> УСТАНОВИТЕ @temp_tb = last_id; -> ПОДГОТОВЬТЕ stmt ИЗ @sql_text; -> ВЫПОЛНИТЕ stmt С ИСПОЛЬЗОВАНИЕМ @temp_tb; -> ЗАФИКСИРУЙТЕ; -> ЗАВЕРШИТЕ запрос $$ OK, 0 строк затронуты (0,00 сек)

3. @Abhi Возможно сделать то, что вы пытаетесь сделать, и я не уверен, зачем вам это нужно. Столбец ID на самом деле никогда не должен быть изменен. Если вы собираетесь выполнять сортировку или что-то еще, пожалуйста, создайте другой столбец INT и внесите туда свои изменения.

4. @Evans кажется, что мне нужно создать еще один столбец и выполнить операции там

Ответ №2:

Ваш синтаксис неверен.

Если вы посмотрите на документы, это четко указано:http://dev.mysql.com/doc/refman/5.0/en/example-auto-increment.html

в этом примере значение auto_increment с этого момента устанавливается равным 100:

 ALTER TABLE tbl AUTO_INCREMENT = 100;
  

Комментарии:

1. OP явно хочет добавить к текущему значению auto_increment, а не просто присвоить некоторому фиксированному значению.

2. как я уже сказал, это всего лишь пример. конечно, OP может экстраполировать правильный синтаксис, чтобы манипулировать им, чтобы делать то, что он хочет, например, находить максимальный текущий идентификатор и добавлять к нему значение. начальное значение auto_increment является статическим значением, поэтому, если OP хочет изменить все текущие значения, это другой вопрос

3. @PatrickQ Вы не можете добавить к auto_increment, однако вы можете установить его начальное значение.

4. @EvanDarwin Да, я в курсе этого. Однако этот «ответ» на самом деле вообще не отвечает на вопрос. Если бы OP знал, как «экстраполировать правильный синтаксис, чтобы манипулировать им, чтобы делать то, что он», тогда вопрос, скорее всего, не был бы задан в первую очередь.

5. @PatrickQ Итак, вы жалуетесь на попытку пользователя ответить на вопрос, на который нет ответа?