0 / 0 / 0
Регистрация: 22.11.2016
Сообщений: 33
|
||||||||||||||||
1 | ||||||||||||||||
Как восстановить AUTO_INCREMENT для столбца с ID20.03.2017, 11:54. Показов 14069. Ответов 13
Метки нет (Все метки)
Переименовал id_cat на id_catsubcat
Пытался исправить (удалить ключ AUTO_INCREMENT):
Подскажите пожалуйста как сделать AUTO_INCREMENT для id_catsubcat?
0
|
20.03.2017, 11:54 | |
Ответы с готовыми решениями:
13
Как в новой версии MySQL назначить AUTO_INCREMENT для поля id Как обновлять AUTO_INCREMENT? Как сбросить AUTO_INCREMENT? Как получить AUTO_INCREMENT таблицы? |
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_ как решение
Решение
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 | |||||
Команда:
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 минуты Создаю таблицу:
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 | ||||||||||
заодно попробуйте такую команду и дайте её вывод:
раз нашлась ошибка, то последнюю команду давать не нужно уже. А насчёт начала счёта с нуля, насколько я знаю, нельзя, т.к. 0, грубо говоря это "служебное число", при попытке вставить запись с ай-ди равным нулю, в автоинкремент-столбец таблицы вставляется следующее свободное число. но можете попытаться используя мой пример:
Добавлено через 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 | |
24.03.2017, 17:16 | |
Помогаю со студенческими работами здесь
14
как работыть с полем id (auto_increment) , искать пропуски и заполнять их? Как восстановить логин и пароль для входа в систему Как удалить Ubuntu и восстановить загрузчик для Windows? Как только что установлений AUTO_INCREMENT записать из одной таблици в другую? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |