Это то, что я пробовал, но это не удалось:
alter table goods add column `id` int(10) unsigned primary AUTO_INCREMENT;
У кого-нибудь есть чаевые?
Это то, что я пробовал, но это не удалось:
alter table goods add column `id` int(10) unsigned primary AUTO_INCREMENT;
У кого-нибудь есть чаевые?
Ответы:
После добавления столбца вы всегда можете добавить первичный ключ:
ALTER TABLE goods ADD PRIMARY KEY(id)
Что касается того, почему ваш скрипт не работал, вам нужно указать PRIMARY KEY
, а не просто слово PRIMARY
:
alter table goods add column `id` int(10) unsigned primary KEY AUTO_INCREMENT;
FIRST
после AUTO_INCREMENT
, что означает, что это id
будет первый столбец уже существующей таблицы. В противном случае он будет помещен в конец таблицы, как написано сейчас, что может немного сбить с толку при простом выполненииSELECT * ...
Если вы хотите добавить ограничение первичного ключа к существующему столбцу, весь ранее перечисленный синтаксис завершится ошибкой.
Чтобы добавить ограничение первичного ключа к существующему столбцу, используйте форму:
ALTER TABLE `goods`
MODIFY 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;
Добавление PK в таблицу с ~ 200 млн строк занимает 2 000 секунд.
Не уверен, что это важно для кого-то еще, но я предпочитаю таблицу идентификаторов первому столбцу в базе данных. Синтаксис для этого:
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,-фут
Используйте этот запрос,
alter table `table_name` add primary key(`column_name`);
Этот код работает в моей базе данных 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
Для меня ни одно из предложений не сработало, что привело к синтаксическим ошибкам, поэтому я просто попробовал использовать phpmyadmin (версия 4.9.2), (10.4.10-MariaDB) и добавил id
столбец с автоинкрементным первичным ключом. Id
столбец был красиво добавлен из первого элемента.
Результат запроса был:
ALTER TABLE table_name
ADD id
INT NOT NULL AUTO_INCREMENT FIRST, ADD PRIMARY KEY ( id
);
Удалите кавычки для правильной работы ...
alter table goods add column id int(10) unsigned primary KEY AUTO_INCREMENT;