2012-03-16 6 views
0

У меня есть таблица, которая выглядит следующимMYSQL + Update ID Column

CREATE TABLE IF NOT EXISTS `language` (
    `idkey` int(10) unsigned NOT NULL AUTO_INCREMENT, 
    `english_lang` text, 
    `japanese_lang` text, 
    PRIMARY KEY (`idkey`), 
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1587 ; 

«IdKey» это просто число, которое начинается с шагом 1 и.

«idkey» в настоящее время имеет пробелы в нумерации из записей, которые я удалил, и я хотел посмотреть, можно ли запустить команду MySQL для повторной записи этого столбца, чтобы в нумерации не было пробелов.

например: переписать его так, чтобы оно начиналось с 1 и заканчивалось до конца (около 1400 записей).

благодаря

+0

Похоже, что idkey должен быть первичным ключом, и, как правило, это плохая идея начать перенумеровать первичные ключи. Есть ли конкретная причина, почему вы хотите это сделать? – Corbin

+0

Стол представляет собой статическую таблицу, на которой он связан, и все еще находится в разработке. Также первичный ключ не связан ни с чем другим. Просто захотелось исправить порядок, прежде чем я поехал вживую, но изо всех сил стараюсь сделать это вручную, поскольку текстовое поле japanese_lang находится в юникоде, а значения теряются при попытке вручную обновить в большинстве редакторов ... Также потребуется много времени для обновления 1400 номеров ... Просто приятно иметь ... надеясь, что кто-то может знать простую команду обновления MySQL, которая сможет перезаписать столбец, подобный этому ... – Adam

ответ

1

Это противоречит стандартной практике, чтобы попытаться заполнить эти «недостающие числа». Вы должны учитывать, что они когда-то были привязаны к чему-то. Присвоение их теперь к чему-то другому может потенциально привести к проблемам - особенно если вы не используете ограничения внешнего ключа и не используете некоторые плохие данные.

Если вы находитесь в ситуации, когда вы протестировали некоторые данные и теперь хотите что-то занять, вы можете сбросить автоинкремент, запустив Alter Table TABLENAME AUTO_INCREMENT=1 (или любой другой номер), или вы можете отбросить и воссоздать таблицу. Если бы он был в производстве, я бы рекомендовал не перезагружать или пытаться «заполнить пробелы».

В интересах полноты, я считаю, что вы можете вставить определенное число в нормально автоматически увеличивающийся столбец, включив его в инструкцию insert. Следующий номер автоинкремента должен подбирать из указанного вами. Если это уже сделано, это вызовет проблемы.

Если вы действительно хотите закрыть пробелы, самый простой способ - создать новую таблицу с той же структурой. Затем запустите запрос, например:

INSERT INTO 
    newtable (column2, column3, column4,...) 
VALUES 
    SELECT column2, column3, column4,... FROM oldtable; 

Снимите старый стол и переименуйте новый стол. Разрывы будут заполнены, и ваш номер автоматического увеличения будет находиться в «правильном» месте.

НО ДЕЙСТВИТЕЛЬНО ВЫ ДОЛЖНЫ ОСТАВИТЬ ГАПЫ ОТ УДАЛЕННЫХ ЗАПИСИ В МЕСТЕ.

+1

Идеальный ответ. Не заполняйте пробелы, поскольку в них есть смысл (что-то там было). –

+0

понять - однако таблица не живая, и ключ ничего не касается. попробовал команду alter table, и нумерация осталась фрагментированной .... – Adam

+0

Команда alter table просто возвращает ее во все, что вы указываете, поэтому следующий идентификатор будет отбираться оттуда. Он не будет автоматически выбирать следующий пустой идентификатор. Простейшей задачей для вас было бы создать новую таблицу с той же структурой, а затем вставить данные из текущей таблицы, за вычетом столбца идентификатора. Я добавлю это к ответу. – Ilion

0

Да, вы можете сделать это beacuse primary key является одиночным для каждой строки, и еще одна вещь, если ваш столбец является автоматическим приращением, тогда вы не можете этого сделать, вручную вы можете это сделать. Но вы спрашиваете о вводе строки, но синтаксис связан с созданием таблицы.

Смежные вопросы