Как добавить первичный ключ в таблицу MySQL?

Это то, что я пробовал, но он терпит неудачу:

alter table goods add column `id` int(10) unsigned primary AUTO_INCREMENT;

У кого-нибудь есть подсказка?

Ответ 1

После добавления столбца вы всегда можете добавить первичный ключ:

ALTER TABLE goods ADD PRIMARY KEY(id)

Что касается того, почему ваш script не работал, вам нужно указать PRIMARY KEY, а не только слово PRIMARY:

alter table goods add column `id` int(10) unsigned primary KEY AUTO_INCREMENT;

Ответ 2

Если ваш стол довольно большой, лучше не использовать утверждение:

alter table goods add column 'id' int(10) unsigned primary KEY AUTO_INCREMENT;

потому что он копирует все данные во временную таблицу, изменяет таблицу и затем копирует ее обратно. Лучше сделать это вручную. Переименуйте вашу таблицу:

rename table goods to goods_old;

создать новую таблицу с первичным ключом и всеми необходимыми индексами:

create table goods (
    id  int(10) unsigned not null AUTO_INCREMENT
    ... other columns ...
    primary key (id)
);

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

- ИСПОЛЬЗУЙТЕ ЭТО ДЛЯ MyISAM СТОЛОВ:

SET UNIQUE_CHECKS=0;
    ALTER TABLE goods DISABLE KEYS;
        INSERT INTO goods (... your column names ...) SELECT ... your column names FROM goods_old; 
    ALTER TABLE goods ENABLE KEYS;
SET UNIQUE_CHECKS=1;

ИЛИ

- Используйте это для таблиц InnoDB :

SET AUTOCOMMIT = 0; SET UNIQUE_CHECKS=0; SET FOREIGN_KEY_CHECKS=0;
    INSERT INTO goods (... your column names ...) SELECT ... your column names FROM goods_old; 
SET FOREIGN_KEY_CHECKS=1; SET UNIQUE_CHECKS=1; COMMIT; SET AUTOCOMMIT = 1;

Чтобы добавить PK в таблицу с ~ 200 млн строк, требуется 2000 секунд.

Ответ 3

Существующий столбец

Если вы хотите добавить ограничение первичного ключа в существующий столбец, все синтаксис, указанный выше, не будет выполнен.

Чтобы добавить ограничение первичного ключа в существующий столбец, используйте форму:

ALTER TABLE `goods`
MODIFY COLUMN `id` INT(10) UNSIGNED PRIMARY KEY AUTO_INCREMENT;

Ответ 4

Не уверен, что это относится к кому-либо еще, но я предпочитаю таблицу идентификаторов для первого столбца в базе данных. Синтаксис для этого:

ALTER TABLE your_db.your_table ADD COLUMN `id` int(10) UNSIGNED PRIMARY KEY AUTO_INCREMENT FIRST;

Это лишь небольшое улучшение по сравнению с первым ответом. Если вы хотите, чтобы он находился в другом положении,

ALTER TABLE unique_address ADD COLUMN `id` int(10) UNSIGNED PRIMARY KEY AUTO_INCREMENT AFTER some_other_column;

НТН, -ft

Ответ 5

Этот код работает в моей mysql db:

ALTER TABLE `goods`
ADD COLUMN `id` INT NOT NULL AUTO_INCREMENT,
ADD PRIMARY KEY (`id`);

Ответ 6

ALTER TABLE GOODS MODIFY ID INT(10) NOT NULL PRIMARY KEY;

Ответ 7

Используйте этот запрос,

alter table 'table_name' add primary key('column_name');

Ответ 8

Попробуйте это,

alter table goods add column `id` int(10) unsigned primary key auto_increment

Ответ 9

Удалить цитаты, чтобы работать должным образом...

alter table goods add column id int(10) unsigned primary KEY AUTO_INCREMENT;