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

У меня есть уже существующая таблица, содержащая '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

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

46
можете ли вы опубликовать существующее определение таблицы?
добавлено автор Taryn, источник
пожалуйста, опубликуйте вывод описать пользователей
добавлено автор DKSan, источник
попробовал это, но он просто возвращает таблицу. что тебе нужно?
добавлено автор Charles Jenkins, источник

11 ответы

Попробуй это

ALTER TABLE `users` ADD `id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY
86
добавлено
Обратите внимание, что это добавляет ID-столбец в качестве последнего столбца в таблице. Добавьте FIRST в запрос, чтобы сделать его первым в этой таблице.
добавлено автор Tobias Baumeister, источник
работает без «Спасибо»!
добавлено автор Jonathan Laliberte, источник
@CharlesJenkins Чтобы избежать ошибки «множественного первичного ключа», отмените существующий первичный ключ до определения нового: ALTER TABLE пользователи DROP PRIMARY KEY, ADD id INT NOT NULL AUTO_INCREMENT PRIMARY KEY
добавлено автор Sean the Bean, источник
В SQL Server 2008 для меня работала замена «AUTO_INCREMENT» на «IDENTITY (1,1)».
добавлено автор Greg A, источник
# 1068 - Определен множественный первичный ключ
добавлено автор Charles Jenkins, источник
Чтобы сделать это первым столбцом, используйте FIRST e.g ALTER TABLE tbl1 ADD id INT ПЕРВИЧНЫЙ КЛЮЧ AUTO_INCREMENT FIRST
добавлено автор Tahir Raza, источник

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

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

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

53
добавлено
что, если я хочу создать индекс на id, но не PK?
добавлено автор morpheus, источник
@Cees Timmerman: ключевое слово FIRST указывает, что новый столбец будет первым столбцом в таблице. Кроме того, вы можете указать конкретную позицию, используя AFTER existent_col_name. Если ни FIRST, ни AFTER не используются, новый столбец добавляется после всех текущих столбцов.
добавлено автор Ruben Ramirez Padron, источник
@morpheus это добавляет индекс UNIQUE, который является индексом сам по себе. Мне не нравится иметь столбец с именем id, который не является PK.
добавлено автор Arth, источник
Что делает FIRST ?
добавлено автор Cees Timmerman, источник
Это сработало для меня и установило столбец идентификатора auto_increment как первичный ключ.
добавлено автор reflexiv, источник

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

ALTER TABLE nametable DROP PRIMARY KEY

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

ALTER TABLE nametable ADD id INT NOT NULL AUTO_INCREMENT PRIMARY KEY
20
добавлено
не может упасть, а затем ADD id. Получит Дублировать имя столбца 'id'
добавлено автор John Joe, источник

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

 ALTER TABLE users ADD id int NOT NULL AUTO_INCREMENT primary key
19
добавлено
Чтобы избежать ошибки «Несколько первичных ключей», отмените существующий первичный ключ до определения нового: ALTER TABLE пользователи DROP PRIMARY KEY, ADD id INT NOT NULL AUTO_INCREMENT PRIMARY KEY
добавлено автор Sean the Bean, источник
это не сработало! Получил эту ошибку: # 1068 - Определен множественный первичный ключ
добавлено автор Charles Jenkins, источник
вы получаете множественный первичный ключ , потому что у вас уже есть первичный ключ в таблице. В таблице может быть только один первичный ключ. Повторите указанную выше команду в таблице, если у нее нет первичного ключа
добавлено автор cchi, источник

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

-- 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;
13
добавлено
посмотрите свой код и отправил его пропустить LTER, а не ALTER, убедитесь, что вы скопировали все это
добавлено автор echo_Me, источник
хорошо, вы можете следовать этим шагам в моем ответе
добавлено автор echo_Me, источник
У вас было 3 опечатки в этом ответе (изменить не изменять, «id id», а комментариям нужно пробел после них). Я отредактировал ответ, чтобы исправить их.
добавлено автор voidstate, источник
mysql> Домены ALTER TABLE изменяют COLUMN id INT AUTO_INCREMENT UNIQUE FIRST; Query OK, 2 строки затронуты (0,27 с) Записи: 2 Дубликаты: 0 Предупреждения: 0 mysql> desc domains; + -------- + -------------- + ------ + ----- + --------- + - ---------- & zwnj; ---- + | Поле | Тип | Null | Ключ | По умолчанию | Экстра | + -------- + -------------- + ------ + ----- + --------- + - ---------- & zwnj; ---- + | id | int (11) | НЕТ | UNI | NULL | auto_increment | | домен | varchar (128) | НЕТ | PRI | NULL | | + -------- + -------------- + ------ + ----- + --------- + - ---------- & ZWNJ; ---- +
добавлено автор beagle, источник
получил это: # 1064 - У вас есть ошибка в синтаксисе SQL; проверьте руководство, соответствующее версии вашего сервера MySQL, для правильного синтаксиса для использования рядом с «(id)» в строке 1
добавлено автор Charles Jenkins, источник
спасибо, но теперь у меня есть эта ошибка: # 1064 - У вас есть ошибка в синтаксисе SQL; проверьте руководство, соответствующее версии вашего сервера MySQL, для правильного синтаксиса, используемого рядом с пользователем ALTER TABLE. ADD id int NOT NULL AUTO_INCREMENT PRIMARY KEY (id) 'в строке 3 извините!
добавлено автор Charles Jenkins, источник
получил эту ошибку: # 1064 - У вас есть ошибка в синтаксисе SQL; проверьте руководство, соответствующее версии вашего сервера MySQL, для правильного синтаксиса для использования рядом с пользователем LTER TABLE. ADD id int NOT NULL AUTO_INCREMENT PRIMARY KEY (id) 'в строке 1
добавлено автор Charles Jenkins, источник

Просто измените ДОБАВИТЬ в MODIFY, и он будет работать!

замещать

ALTER TABLE users ADD id int NOT NULL AUTO_INCREMENT

к

ALTER TABLE users MODIFY id int NOT NULL AUTO_INCREMENT;
2
добавлено
ALTER TABLE users ADD id int NOT NULL AUTO_INCREMENT primary key FIRST
2
добавлено
ALTER TABLE users CHANGE id int( 30 ) NOT NULL AUTO_INCREMENT

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

2
добавлено
Вы можете улучшить форматирование
добавлено автор Grzegorz Piwowarek, источник
Это должен быть правильный ответ.
добавлено автор Fandi Susanto, источник

Продолжайте так:

Make a dump of your database first

Remove the primary key like that

ALTER TABLE ваш основной DROP PRIMARY KEY

Add the new column like that

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

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

1
добавлено

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

 ALTER TABLE `tableName` DROP PRIMARY KEY;

Добавление столбца auto-increment в таблицу:

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;
1
добавлено

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

ALTER TABLE Table1
DROP CONSTRAINT PK_Table1_Col1
GO

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

0
добавлено
DBA - русскоговорящее сообщество
DBA - русскоговорящее сообщество
1 345 участник(ов)

Общаемся и обсуждаем темы, посвященные DBA, PostgreSQL, Redis, MongoDB, MySQL, neo4j, riak и т.д. См. также: @devops_ru, @kubernetes_ru, @docker_ru, @nodejs_ru Рекомендуем сразу отключить уведомления, чтобы пребывание здесь было полезным и комфортным.

MySQL
MySQL
995 участник(ов)

The group is about MySQL. For code use hastebin.com. Admin: @smlkw

SqlCom.ru - Стиль жизни SQL
SqlCom.ru - Стиль жизни SQL
908 участник(ов)

Правила чата - https://t.me/sqlcom/88269 @sqlcom - основной канал (только MS SQL) @sql_ninja - второй канал (SQL вопросы начального уровня и свободное общение) @Gopnegbot - Викторина по SQL Server (наберите в привате /quiz). Предложения в @sql_ninja

SQL_Ninja
SQL_Ninja
340 участник(ов)

Правила чата - https://t.me/sqlcom/88269 @sqlcom - основной канал (только SQL) @sql_ninja - второй канал (SQL вопросы начального уровня и свободное общение) @Gopnegbot - Викторина по SQL Server (наберите в привате /quiz)