2015-01-23 3 views
1

Как обновить поле id существующей строки (автоинкремент), чтобы присвоить ему значение, которое обычно автоматически присваивается новой вставке (то есть наивысшему id + 1)?Обновить поле автоинкремента до максимального значения + 1

http://dev.mysql.com/doc/refman/5.0/en/example-auto-increment.html состояние:

"... Вы можете также явно назначить 0 в колонку для создания порядковых номеров."

Но это, похоже, не так. Я попытался присвоить значение 0, и он делает именно это. Присваивает значение 0.

Я рассмотрел удаление и повторное включение строки, но это кажется беспорядочным.

Также пробовал:

UPDATE example_table 
SET id = (SELECT id+1 FROM example_table ORDER BY id DESC LIMIT 1) 
WHERE id = 1000; 

Который возвращает ошибку: Вы не можете указать целевую таблицу 'example_table' для обновления в ЕКОМ

и:

UPDATE example_table SET id = max(id)+1 WHERE id = 1000; 

Какие возвращает ошибку: Недопустимое использование групповой функции

Кажется, что это должно быть легко ... что мне не хватает?

ответ

2

MySQL не позволяет использовать таблицу, обновляемую в предложении from. вы можете иметь его как подзапрос

UPDATE example_table 
    SET id= (SELECT maxId 
       FROM (SELECT MAX(id) + 1 AS maxId 
        FROM example_table 
        ) t 
      ) 
    WHERE id = 1000; 
+0

спасибо .. это то, что на самом деле, что лучшим способом хотя? Подпроцесс в подзапросе кажется абсурдно сложным для такой простой задачи. – billynoah

+0

@billynoah, да я согласен, или вам нужно получить maxid в переменной и использовать его, но вам нужно, чтобы оба они были в транзакции. – radar

+0

Я попробовал ваше предложение только сейчас и получил ошибку *** Каждая производная таблица должна иметь свой собственный псевдоним *** – billynoah

1

Вы также можете сделать это с join:

UPDATE example_table CROSS JOIN 
     (SELECT MAX(id) + 1 as nextid 
     FROM example_table 
     ) maxet 
    SET id = maxet.nextid 
    WHERE id = 1000; 
Смежные вопросы