Добавить идентификатор автоинкремента в существующую таблицу?


87

У меня есть уже существующая таблица, содержащая "fname", "lname", "email", "password" и "ip". Но теперь мне нужен столбец с автоинкрементом. Однако когда я вхожу:

ALTER TABLE users
ADD id int NOT NULL AUTO_INCREMENT

Получаю следующее:

#1075 - Incorrect table definition; there can be only one auto column and it must be defined as a key

Любой совет?:)


вы можете опубликовать существующее определение таблицы?
Тарин

пожалуйста, describe users
опубликуйте

пробовал это, но он просто возвращает таблицу. что вам нужно?
Чарльз Дженкинс

@CharlesJenkins Не могли бы вы выбрать правильный ответ?
Вадих М.

MODIFY также может использоваться как: пользователи ALTER TABLE MODIFY id int NOT NULL AUTO_INCREMENT; / *
Вилас Джоши,

Ответы:


134

Попробуй это

ALTER TABLE `users` ADD `id` INT NOT NULL AUTO_INCREMENT;

для существующего первичного ключа


12
# 1068 - Определено несколько первичных ключей
Чарльз Дженкинс,

6
В SQL Server 2008 замена AUTO_INCREMENT на IDENTITY (1,1) у меня сработала.
Грег А.

14
Обратите внимание, что это добавляет столбец ID в качестве последнего столбца в таблице. Добавьте FIRSTк запросу, чтобы он стал первым в этой таблице.
Тобиас Баумейстер,

5
@CharlesJenkins Чтобы избежать ошибки «Множественный первичный ключ», отбросьте существующий первичный ключ перед определением нового:ALTER TABLE users DROP PRIMARY KEY, ADD id INT NOT NULL AUTO_INCREMENT PRIMARY KEY
Шон Бин

7
Чтобы сделать его первым столбцом, используйте, FIRSTнапример,ALTER TABLE tbl1 ADD id INT PRIMARY KEY AUTO_INCREMENT FIRST
Tahir Raza

75

Если вам все равно, используется ли автоматический идентификатор PRIMARY KEY, вы можете просто сделать

ALTER TABLE `myTable` ADD COLUMN `id` INT AUTO_INCREMENT UNIQUE FIRST;

Я просто сделал это, и это сработало.


1
Это сработало для меня и установило столбец идентификатора auto_increment в качестве первичного ключа.
reflexiv

3
Что там FIRSTделает?
Cees Timmerman

13
@Cees Timmerman: ключевое слово FIRST указывает, что новый столбец будет первым столбцом в таблице. Кроме того, вы можете указать конкретную позицию, используя AFTER existent_col_name. Если ни FIRST, ни AFTER не используются, новый столбец добавляется после всех текущих столбцов.
Рубен Рамирес Падрон

что, если я хочу создать индекс по идентификатору, но не по PK?
morpheus

@morpheus добавляет УНИКАЛЬНЫЙ индекс, который сам по себе является индексом. Мне не нравится столбец с именем id, который не является PK.
Арт

38

Если вы хотите добавить AUTO_INCREMENT в существующую таблицу, необходимо выполнить следующую команду SQL:

 ALTER TABLE users ADD id int NOT NULL AUTO_INCREMENT primary key

1
это не сработало! Получил эту ошибку: # 1068 - Определено несколько первичных ключей
Чарльз Дженкинс,

4
вы получаете, Multiple primary key definedпотому что у вас уже есть первичный ключ в таблице. Таблица может иметь только один первичный ключ. Повторите указанную выше команду для таблицы, если у нее нет первичного ключа
cchi

3
Чтобы избежать ошибки «Множественный первичный ключ», отбросьте существующий первичный ключ перед определением нового:ALTER TABLE users DROP PRIMARY KEY, ADD id INT NOT NULL AUTO_INCREMENT PRIMARY KEY
Шон Бин

22

Сначала вам нужно удалить первичный ключ таблицы

ALTER TABLE nametable DROP PRIMARY KEY

и теперь вы можете добавить автоинкремент ...

ALTER TABLE nametable ADD id INT NOT NULL AUTO_INCREMENT PRIMARY KEY

не может быть отброшен, тогда ДОБАВИТЬ идентификатор. ВыйдуDuplicate column name 'id'
Джон Джо

1
@JohnJoe, это потому, что у вас уже есть столбец id. Попробуйте это: ALTER TABLE nametable DROP PRIMARY KEY, MODIFY COLUMN id INT NOT NULL AUTO_INCREMENT PRIMARY KEY
TwoCode

17

Что ж, вы должны сначала отбросить auto_incrementи у primary keyвас есть, а затем добавить свое, как показано ниже:

-- drop auto_increment capability
alter table `users` modify column id INT NOT NULL;
-- in one line, drop primary key and rebuild one
alter table `users` drop primary key, add primary key(id);
-- re add the auto_increment capability, last value is remembered
alter table `users` modify column id INT NOT NULL AUTO_INCREMENT;

1
получил эту ошибку: # 1064 - У вас есть ошибка в синтаксисе SQL; проверьте руководство, соответствующее вашей версии сервера MySQL, чтобы найти правильный синтаксис для использования рядом с 'LTER TABLE users ADD id int NOT NULL AUTO_INCREMENT PRIMARY KEY (id)' в строке 1
Чарльз Дженкинс,

посмотрите свой код, вы опубликовали его, пропустив LTER, а не ALter, убедитесь, что вы все скопировали
echo_Me

спасибо, но теперь у меня такая ошибка: # 1064 - Ошибка синтаксиса SQL; проверьте руководство, соответствующее вашей версии сервера MySQL, на предмет правильного синтаксиса для использования рядом с 'ALTER TABLE users ADD id int NOT NULL AUTO_INCREMENT PRIMARY KEY (id)' в строке 3 извините!
Чарльз Дженкинс

получил это: # 1064 - У вас есть ошибка в синтаксисе SQL; проверьте руководство, соответствующее вашей версии сервера MySQL, чтобы найти правильный синтаксис для использования рядом с '(id)' в строке 1
Чарльз Дженкинс,


13

Если вы запустите следующую команду:

ALTER TABLE users ADD id int NOT NULL AUTO_INCREMENT PRIMARY KEY;

Это покажет вам ошибку:

ERROR 1060 (42S21): Duplicate column name 'id'

Это потому, что эта команда попытается добавить новый столбец с именем idв существующую таблицу.

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

ALTER TABLE users MODIFY id int NOT NULL AUTO_INCREMENT PRIMARY KEY;

Это должно работать для изменения существующего ограничения столбца ....!


6

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

 ALTER TABLE `tableName` DROP PRIMARY KEY;

Добавление столбца с автоинкрементом в таблицу:

ALTER TABLE `tableName` ADD `Column_name` INT PRIMARY KEY AUTO_INCREMENT;

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

alter table `tableName` modify column `Column_name` INT NOT NULL AUTO_INCREMENT PRIMARY KEY;

5

Просто измените ДОБАВИТЬ на ИЗМЕНИТЬ, и все заработает!

Заменить

ALTER TABLE users ADD id int NOT NULL AUTO_INCREMENT

Чтобы

ALTER TABLE users MODIFY id int NOT NULL AUTO_INCREMENT;

4
ALTER TABLE users CHANGE id int( 30 ) NOT NULL AUTO_INCREMENT

целочисленный параметр основан на моей настройке sql по умолчанию, хорошего дня



1

Для PostgreSQL вы должны использовать SERIAL вместо auto_increment.

ALTER TABLE your_table_name ADD COLUMN id SERIAL NOT NULL PRIMARY KEY

0

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

ALTER TABLE Table1
DROP CONSTRAINT PK_Table1_Col1
GO

а затем напишите свой запрос как есть.


0
ALTER TABLE `table` ADD `id` INT NOT NULL AUTO_INCREMENT unique

Попробуй это. Не нужно отказываться от первичного ключа.


-1

Поступайте так:

Make a dump of your database first

Remove the primary key like that

ALTER TABLE yourtable DROP PRIMARY KEY

Add the new column like that

ALTER TABLE yourtable добавить идентификатор столбца INT NOT NULL AUTO_INCREMENT FIRST, ADD primary KEY Id (Id)

Таблица будет просмотрена и AutoInc обновлен.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.