За последние 24 часа нас посетил 16501 программист и 1551 робот. Сейчас ищет 2021 программист ...

AUTO_INCREMENT не изменить

Тема в разделе "MySQL", создана пользователем B0ris, 18 мар 2016.

  1. B0ris

    B0ris Новичок

    С нами с:
    18 дек 2015
    Сообщения:
    8
    Симпатии:
    0
    Адрес:
    Санкт-Петербург
    Здравствуйте!

    Использую mysql Ver 5.6.14.

    Захожу через консоль. Выбираю базу:
    Код (PHP):
    1. use db_name
    Набираю команду:
    Код (PHP):
    1. ALTER TABLE `name_table` auto_increment = 8; 
    Получаю ответ:
    Query OK, 0 rows affected (0.00 sec)
    Records: 0 Duplicates: 0 Warnings: 0

    А значение счетчика auto_increment в таблице не меняется. Так и продолжает лепить по порядку со старого значения.

    Пробовал и от root'а и от владельца таблицы, ничего не получается. У всех есть привилегии на данную БД и ALTER.

    На другой БД, на этом же сервере все изменяется.

    Не подскажите в чем может быть дело?
     
  2. MiksIr

    MiksIr Активный пользователь

    С нами с:
    29 ноя 2006
    Сообщения:
    2.339
    Симпатии:
    44
    После альтера скажи show create table `name_table`; и посмотри - изменился ли автоинкремент.
     
  3. B0ris

    B0ris Новичок

    С нами с:
    18 дек 2015
    Сообщения:
    8
    Симпатии:
    0
    Адрес:
    Санкт-Петербург
    Заметил одну особенность, если у меня сейчас счетчик auto_increment = 1000 и я делаю ALTER TABLE `name_table` auto_increment = 1100;
    то значение изменяется на 1100.
    Если сделать ALTER TABLE `name_table` auto_increment = 900;
    то значение не изменяется.
     
  4. MiksIr

    MiksIr Активный пользователь

    С нами с:
    29 ноя 2006
    Сообщения:
    2.339
    Симпатии:
    44
    Значит уже есть id со значением более 900
     
  5. B0ris

    B0ris Новичок

    С нами с:
    18 дек 2015
    Сообщения:
    8
    Симпатии:
    0
    Адрес:
    Санкт-Петербург
    Посмотрел. Не изменяется в меньшую сторону, только в большую. Через phpmyadmin тожесамое. Ошибок не выдает. Пишет ок, а значение не изменяется.
     
  6. MiksIr

    MiksIr Активный пользователь

    С нами с:
    29 ноя 2006
    Сообщения:
    2.339
    Симпатии:
    44
    Значение автоинкремента не может быть меньше, чем максимальное существующее в таблице.
     
  7. B0ris

    B0ris Новичок

    С нами с:
    18 дек 2015
    Сообщения:
    8
    Симпатии:
    0
    Адрес:
    Санкт-Петербург
    Это тоже уже проверил. Последний id 899. После него все записи удалены. Я и хотел поставить по порядку, чтобы следующий начинался с id 900.
    SET foreign_key_checks = 0;
    ALTER TABLE `name_table` auto_increment = 900;
    SET foreign_key_checks = 1;

    Не работает.

    Вот даже сейчас например у меня стоит auto_increment = 900, я его делаю auto_increment = 901 и назад на 900 откатить уже не могу.
    Весь мозг взорвал. Можно забить кончено, но из принципа уже хочу разобраться.

    Добавлено спустя 6 минут 27 секунд:
    Попробовал в этой же БД создать новую пустую таблицу, в ней создал поле id первичный ключ и его автоинкремент. Не добавлял ни одной записи. Изменяю счетчик auto_increment = 5. Все, обратно меньше 5 мне его не изменить. Ни одной записи в таблице. С другими БД в этой же СУБД таких траблов нет.
     
  8. MiksIr

    MiksIr Активный пользователь

    С нами с:
    29 ноя 2006
    Сообщения:
    2.339
    Симпатии:
    44
    Насколько я помню, это поведение было присуще MyISAM таблицам.
    В InnoDB все же ориентир идет на значения в таблице.
     
  9. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    Чувак, тебе не надо это делать. Вообще.
     
  10. MiksIr

    MiksIr Активный пользователь

    С нами с:
    29 ноя 2006
    Сообщения:
    2.339
    Симпатии:
    44
    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. For InnoDB, if the value is less than the current maximum value in the column, no error occurs and the current sequence value is not changed.
    (c) https://dev.mysql.com/doc/refman/5.5/en/alter-table.html
     
  11. B0ris

    B0ris Новичок

    С нами с:
    18 дек 2015
    Сообщения:
    8
    Симпатии:
    0
    Адрес:
    Санкт-Петербург
    У меня InnoDB

    Спасибо за break :) ну бывает у меня такое - "бесконечный цикл". Потом жалею, что пол дня потеряно.


    Всем спасибо за ответы! Извините за беспокойство!
     
  12. Zuldek

    Zuldek Старожил

    С нами с:
    13 май 2014
    Сообщения:
    2.381
    Симпатии:
    344
    Адрес:
    Лондон, Тисовая улица, дом 4, чулан под лестницей
    а всего тог надо было офдоку почитать по типу.