Форум программистов, компьютерный форум, киберфорум
MySQL
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.55/75: Рейтинг темы: голосов - 75, средняя оценка - 4.55
0 / 0 / 0
Регистрация: 22.11.2016
Сообщений: 33
1

Как восстановить AUTO_INCREMENT для столбца с ID

20.03.2017, 11:54. Показов 14069. Ответов 13
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Переименовал id_cat на id_catsubcat
SQL
1
ALTER TABLE dl CHANGE id_cat id_catsubcat INT(11);
В результате чего отвалился AUTO_INCREMENT.

Пытался исправить (удалить ключ AUTO_INCREMENT):
SQL
1
ALTER TABLE dl DROP PRIMARY KEY;
Потом добавить ключ AUTO_INCREMENT.
SQL
1
ALTER TABLE dl ADD `id_catsubcat` INT NOT NULL AUTO_INCREMENT PRIMARY KEY FIRST;
Результат: Duplicate column name 'id_catsubcat'.

Подскажите пожалуйста как сделать AUTO_INCREMENT для id_catsubcat?
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
20.03.2017, 11:54
Ответы с готовыми решениями:

Как в новой версии MySQL назначить AUTO_INCREMENT для поля id
Парни как в новой версии MySQL (3.3.5 и выше) заставить поле id заполнятся автоматически?

Как обновлять AUTO_INCREMENT?
У меня есть таблица, в ней автоикрементируемое поле ID, после удаление записи нумерация в этом поле...

Как сбросить AUTO_INCREMENT?
День добрый, Нужно удалить все записи в таблице + сбросить счетчик. Удалить все записи получается...

Как получить AUTO_INCREMENT таблицы?
Какой запрос отправить для того, чтобы получить AUTO_INCREMENT таблицы?

13
0 / 0 / 0
Регистрация: 22.03.2017
Сообщений: 11
23.03.2017, 00:00 2
Уже не помню всего синтаксиса ALTER TABLE, но если не важна существующая индексация, то самый просто способ - это удалить столбец и добавить его заново, что-то типа:
ALTER TABLE dl DROP COLUMN `id_catsubcat`, ADD `id_catsubcat` INT NOT NULL AUTO_INCREMENT PRIMARY KEY FIRST;

Вы же пытаетесь при существующем столбце добавить столбец с тем же именем, удаляя не столбец, а "ключ"

Добавлено через 18 минут
Если память не изменяет, то в идеале (чтоб не удалять никаких данных) Вам нужно это:
alter table dl change id_catsubcat id_catsubcat int primary key auto_increment;
0
614 / 488 / 175
Регистрация: 02.03.2010
Сообщений: 1,238
23.03.2017, 09:56 3
Лучший ответ Сообщение было отмечено _ViPeR_ как решение

Решение

MySQL
1
ALTER TABLE dl MODIFY COLUMN `id_catsubcat` INT NOT NULL AUTO_INCREMENT PRIMARY KEY FIRST;
1
0 / 0 / 0
Регистрация: 22.11.2016
Сообщений: 33
23.03.2017, 11:19  [ТС] 4
id_catsubcat уже имеет идентификаторы!
Плюс AUTO_INCREMENT надо продолжить начиная с (для примера) 82.
Какую команду надо пхнуть MySQL?

П.С.
Можно удалить столбец и создать его заново с AUTO_INCREMENT'ом.
Но так не подходит!
0
0 / 0 / 0
Регистрация: 22.03.2017
Сообщений: 11
23.03.2017, 14:57 5
Если Вам ничего из вышепредложенного не подходит - делайте бэкап таблицы, в файле бэкапа меняйте атрибуты столбца (так чтоб он автоинкрементом стал), удаляйте таблицу из базы и восстанавливайте её из бэкапа. И нумерация, и всё остальное сохранится, плюс получите свой автоинкремент.
Хотя я не пойму, отчего у Вас не срабатывает:
alter table dl change id_catsubcat id_catsubcat int primary key auto_increment;
проверял у себя - отлично работает
0
0 / 0 / 0
Регистрация: 22.11.2016
Сообщений: 33
24.03.2017, 14:22  [ТС] 6
Команда:
MySQL
1
alter table dl change id_catsubcat id_catsubcat int primary key auto_increment;
Выдаёт ошибку:
ALTER TABLE causes auto_increment resequencing, resulting in duplicate entry '1' for key 'PRIMARY'
0
0 / 0 / 0
Регистрация: 22.03.2017
Сообщений: 11
24.03.2017, 15:16 7
напишите сюда вывод команды:
select count(*) from dl where id_catsubcat=1;
0
0 / 0 / 0
Регистрация: 22.11.2016
Сообщений: 33
24.03.2017, 15:42  [ТС] 8
Вывод команды:
-----------
count(*)
1
-----------
0
0 / 0 / 0
Регистрация: 22.03.2017
Сообщений: 11
24.03.2017, 16:02 9
Ерунда какая-то. Сообщение: ALTER TABLE causes auto_increment resequencing, resulting in duplicate entry '1' for key 'PRIMARY' говорит Вам о том, что у Вас есть две записи в таблице с id_catsubcat=1...
Соответственно count(*) должен вывести 2...

Добавлено через 4 минуты
Создаю таблицу:
SQL
1
CREATE TABLE dl (id_catsubcat INT(8), name text);
Добавляю туда строки:
SQL
1
INSERT INTO dl VALUES (1,"a"),(2,"b"),(3,"c"),(4,"d"),(1,"e"),(5,"f");
Пытаюсь сделать столбец с автоинкрементом:
SQL
1
ALTER TABLE dl CHANGE id_catsubcat id_catsubcat INT PRIMARY KEY AUTO_INCREMENT;
получаю ошибку:
ERROR 1062 (23000): ALTER TABLE causes auto_increment resequencing, resulting in duplicate entry '1' for key 'PRIMARY'
Если в одной из строк, в которой ай-ди равен единице, заменить его на неповторяющееся значение, то всё отрабатывает отлично...
0
0 / 0 / 0
Регистрация: 22.11.2016
Сообщений: 33
24.03.2017, 16:26  [ТС] 10
Сейчас посмотрю!
Пожалуйста не уходите с темы...

Добавлено через 11 минут
Ошибка нашлась! Спасибо.

Ещё вопрос.
А можно создать столбец с AUTO_INCREMENT'ом (id_catsubcat) в котором счёт начинался не 1, а 0?
Пожалуйста подскажите.
0
0 / 0 / 0
Регистрация: 22.03.2017
Сообщений: 11
24.03.2017, 16:38 11
заодно попробуйте такую команду и дайте её вывод:
SQL
1
SELECT * FROM (SELECT id_catsubcat i, COUNT(*) c FROM dl GROUP BY id_catsubcat) t WHERE t.c>1;
Добавлено через 3 минуты
раз нашлась ошибка, то последнюю команду давать не нужно уже.
А насчёт начала счёта с нуля, насколько я знаю, нельзя, т.к. 0, грубо говоря это "служебное число", при попытке вставить запись с ай-ди равным нулю, в автоинкремент-столбец таблицы вставляется следующее свободное число.
но можете попытаться используя мой пример:
SQL
1
2
3
CREATE TABLE dl (id_catsubcat INT(8), name text);
INSERT INTO dl VALUES (1,"a"),(2,"b"),(3,"c"),(4,"d"),(0,"e"),(5,"f");
ALTER TABLE dl CHANGE id_catsubcat id_catsubcat INT PRIMARY KEY AUTO_INCREMENT;
не готов точно сказать, что выйдет в итоге, но, думаю, ругнётся

Добавлено через 1 минуту
или заменит 0 на следующее свободное число
0
0 / 0 / 0
Регистрация: 22.11.2016
Сообщений: 33
24.03.2017, 16:50  [ТС] 12
Выдаёт empty set (0,05сек) - пусто.

Ошибка ...duplicate entry... была из-за того, что я умудрился врезать в таблицу (dl) id_catsubcat = 0.
Я удалил эту строку и все заработало.

Повторный вопрос.
А можно создать столбец с AUTO_INCREMENT'ом (id_catsubcat) в котором счёт начинался не 1, а 0?
Мне с нуля было бы удобно...

Добавлено через 2 минуты
Придется подправить часть проекта на 1 (жаль нолик).
Спасибо.
0
0 / 0 / 0
Регистрация: 22.03.2017
Сообщений: 11
24.03.2017, 16:52 13
А, ну раз у Вас там был 0, тогда понятно. Тут всё просто: если в таблице не было ключа с автоинкрементом, то когда Вы пытались его добавить, "следующее" значение автоинкремента у таблицы было равно "1". При этом, увидев 0 в значении столбца, СУБД попыталась (согласно своих правил) заменить этот 0 на "следующее", по её мнению значение. А следующей была как раз единица.
Нет, 0 туда поместить никак нельзя.
0
0 / 0 / 0
Регистрация: 22.11.2016
Сообщений: 33
24.03.2017, 17:16  [ТС] 14
Блин, работы себе подкинул...
Спасибо.
0
24.03.2017, 17:16
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
24.03.2017, 17:16
Помогаю со студенческими работами здесь

как работыть с полем id (auto_increment) , искать пропуски и заполнять их?
Доброго времени суток. У меня есть таблица в базе date в ней 2 поля id и date_add, поле id ...

Как восстановить логин и пароль для входа в систему
Люди помогите!!!!!!!!! Зашла в безопасный режим,для того,чтобы удалить китайскую программу Baidu,и...

Как удалить Ubuntu и восстановить загрузчик для Windows?
Вчера попробовал просто удалить разделы на винчестере. Это была плохая идея, т.к. загрузчиком был...

Как только что установлений AUTO_INCREMENT записать из одной таблици в другую?
Есть запрос: $query=mysql_query("INSERT INTO `database`.`client` (`code_client`, `name`,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru