Можно ли добавить столбец первичного индекса автоинкремента в полную таблицу MySQL с запозданием? - PullRequest
3 голосов
/ 31 мая 2011

Если предположить, что в этой таблице содержится почти 5 000 000 строк

CREATE TABLE `author2book` (
  `author_id` int(11) NOT NULL,
  `book_id` int(11) NOT NULL,
  KEY `author_id_INDEX` (`author_id`),
  KEY `paper_id_INDEX` (`book_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci

, можно ли добавить столбец первичного индекса id с autoincrement на первом месте?Я ожидаю что-то вроде этого:

CREATE TABLE `author2book` (
  `id` int(11) NOT NULL AUTO_INCREMENT,  <<<<  This is what I try to achieve!
  `author_id` int(11) NOT NULL,
  `book_id` int(11) NOT NULL,
  KEY `author_id_INDEX` (`author_id`),
  KEY `paper_id_INDEX` (`book_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci

Возможно ли это?

Редактировать: я должен упомянуть, что я хотел бы, чтобы добавленный столбец был заполнен.

Ответы [ 3 ]

5 голосов
/ 01 июня 2011

Вы можете использовать ALTER TABLE, чтобы добавить столбец и индекс в одну команду. i.e.:

ALTER TABLE author2book ADD id INT(11) UNSIGNED NOT NULL AUTO_INCREMENT, ADD PRIMARY KEY (id);

См. документы MySQL для ALTER TABLE для получения дополнительной информации.

1 голос
/ 31 мая 2011

Создайте новую таблицу с нужной вам структурой и автоинкрементным ключом, а затем вставьте все записи из этой таблицы в эту новую таблицу ... затем удалите (или переименуйте) исходную таблицу и переименуйте новуюТаблица с исходным именем.

insert into newTable (author_id, book_id) 
select * from author2book

newTable будет содержать желаемый результат.

0 голосов
/ 31 мая 2011
ALTER TABLE author2book
ADD COLUMN `id` int(11) NOT NULL FIRST;

Заполните поле id вручную (может быть, по сценарию?), Затем:

ALTER TABLE author2book
MODIFY COLUMN `id` int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY;
...