Для меня это говорит: это определило бы несколько первичных ключей. Я использую InnoDB. Заметьте, у меня их уже 3.
LMD
2
Я бы обязательно поставил FIRSTпосле AUTO_INCREMENT, что означает, что это idбудет первый столбец уже существующей таблицы. В противном случае он будет помещен в конец таблицы, как написано сейчас, что может немного сбить с толку при простом выполненииSELECT * ...
StefanK
Как получить первое место в новой колонке id
TipVisor
17
Существующий столбец
Если вы хотите добавить ограничение первичного ключа к существующему столбцу, весь ранее перечисленный синтаксис завершится ошибкой.
Чтобы добавить ограничение первичного ключа к существующему столбцу, используйте форму:
mysql не распознает MODIFY как правильный оператор (по крайней мере, в XAMPP, InnoDB)
LMD
@LMD На какой версии MySQL вы работаете? (ПРИМЕЧАНИЕ: я знаю, что это сработало в то время, когда я опубликовал это, и я считаю, что это было 5,6 ... но я не могу точно вспомнить)
MER
1
Если у вас, как у меня, это не работает, замените MODIFY на CHANGE, и он будет работать!
csr-nontol,
12
Если ваша таблица довольно большая, лучше не использовать инструкцию:
потому что он делает копию всех данных во временной таблице, изменяет таблицу, а затем копирует ее обратно. Лучше сделать это вручную. Переименуйте свою таблицу:
rename table goods to goods_old;
создать новую таблицу с первичным ключом и всеми необходимыми индексами:
createtable goods (
id int(10) unsigned notnull AUTO_INCREMENT
... other columns ...primarykey(id));
переместить все данные из старой таблицы в новую, отключив ключи и индексы для ускорения копирования:
SET UNIQUE_CHECKS=0;ALTERTABLE goods DISABLE KEYS;INSERTINTO goods (... your column names ...)SELECT... your column names FROM goods_old;ALTERTABLE goods ENABLE KEYS;SET UNIQUE_CHECKS=1;
SET AUTOCOMMIT =0;SET UNIQUE_CHECKS=0;SET FOREIGN_KEY_CHECKS=0;INSERTINTO 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 секунд.
Для меня ни одно из предложений не сработало, что привело к синтаксическим ошибкам, поэтому я просто попробовал использовать phpmyadmin (версия 4.9.2), (10.4.10-MariaDB) и добавил idстолбец с автоинкрементным первичным ключом. Idстолбец был красиво добавлен из первого элемента.
Результат запроса был:
ALTER TABLE table_nameADD idINT NOT NULL AUTO_INCREMENT FIRST, ADD PRIMARY KEY ( id);
Ответы:
После добавления столбца вы всегда можете добавить первичный ключ:
ALTER TABLE goods ADD PRIMARY KEY(id)
Что касается того, почему ваш скрипт не работал, вам нужно указать
PRIMARY KEY
, а не просто словоPRIMARY
:источник
FIRST
послеAUTO_INCREMENT
, что означает, что этоid
будет первый столбец уже существующей таблицы. В противном случае он будет помещен в конец таблицы, как написано сейчас, что может немного сбить с толку при простом выполненииSELECT * ...
Существующий столбец
Если вы хотите добавить ограничение первичного ключа к существующему столбцу, весь ранее перечисленный синтаксис завершится ошибкой.
Чтобы добавить ограничение первичного ключа к существующему столбцу, используйте форму:
источник
Если ваша таблица довольно большая, лучше не использовать инструкцию:
потому что он делает копию всех данных во временной таблице, изменяет таблицу, а затем копирует ее обратно. Лучше сделать это вручную. Переименуйте свою таблицу:
создать новую таблицу с первичным ключом и всеми необходимыми индексами:
переместить все данные из старой таблицы в новую, отключив ключи и индексы для ускорения копирования:
- ИСПОЛЬЗУЙТЕ ЭТО ДЛЯ ТАБЛИЦ MyISAM :
ИЛИ
- ИСПОЛЬЗУЙТЕ ЭТО ДЛЯ ТАБЛИЦ InnoDB :
Добавление PK в таблицу с ~ 200 млн строк занимает 2 000 секунд.
источник
Не уверен, что это важно для кого-то еще, но я предпочитаю таблицу идентификаторов первому столбцу в базе данных. Синтаксис для этого:
Это лишь небольшое улучшение по сравнению с первым ответом. Если вы хотите, чтобы он был в другом положении, тогда
HTH,-фут
источник
Используйте этот запрос,
источник
Этот код работает в моей базе данных mysql:
источник
источник
Попробуй это,
источник
Для меня ни одно из предложений не сработало, что привело к синтаксическим ошибкам, поэтому я просто попробовал использовать phpmyadmin (версия 4.9.2), (10.4.10-MariaDB) и добавил
id
столбец с автоинкрементным первичным ключом.Id
столбец был красиво добавлен из первого элемента.Результат запроса был:
ALTER TABLE
table_name
ADDid
INT NOT NULL AUTO_INCREMENT FIRST, ADD PRIMARY KEY (id
);источник
Удалите кавычки для правильной работы ...
источник