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


Это то, что я пытался, но ничего не получается:

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

у кого-нибудь есть совет?

8 75

8 ответов:

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

ALTER TABLE goods ADD PRIMARY KEY(id)

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

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

если ваша таблица довольно большая лучше не использовать заявление:

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;

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

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

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

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

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

этот код работает в моей БД MySQL:

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

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

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

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

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;

HTH, -м

удалить кавычки для правильной работы...

изменить таблицу товаров добавить столбец ID типа int(10) unsigned на первичный ключ типа AUTO_INCREMENT;