Це те, що я спробував, але це не вдається:
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;
Щоб додати ПК до столу з ~ 200 млн рядків, потрібно 2000 секунд.
Не впевнений, чи це стосується когось іншого, але я віддаю перевагу таблиці 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, -ft
Скористайтеся цим запитом,
alter table `table_name` add primary key(`column_name`);
Цей код працює в моєму mysql db:
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;
Для мене жодна пропозиція не спрацювала із синтаксисом помилок, тому я просто спробував використовувати phpmyadmin (версія 4.9.2), (10.4.10-MariaDB) та додав idстовпчик з первинним ключем автоматичного збільшення. Idстовпчик було добре додано з першого елемента.
Вихід запиту:
АЛЬТЕР ТАБЛИКА table_nameДОДАТИ idНЕ НУЛЬНИЙ АВТО_ІНКРЕМЕНТ ПЕРШИМ, ДОДАТИ ПЕРШИЙ КЛЮЧ ( id);
Видаліть цитати, щоб правильно працювати ...
alter table goods add column id int(10) unsigned primary KEY AUTO_INCREMENT;