Додати ідентифікатор автоматичного збільшення до існуючої таблиці?


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
DKS,

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

@CharlesJenkins Чи можете ви вибрати правильну відповідь?
Вадіх М.

MODIFY також може використовуватися як: ЗМІНИТИ ТАБЛИЦЮ користувачів 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
Тахір Раза

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 вказує, що новий стовпець буде першим стовпцем у таблиці. Крім того, ви можете вказати конкретну позицію, використовуючи ПІСЛЯ existent_col_name. Якщо не використовуються ні ПЕРШИЙ, ні ПІСЛЯ, новий стовпець додається після всіх поточних стовпців.
Рубен Рамірес Падрон

що робити, якщо я хочу створити індекс на ідентифікаторі, але не на ПК?
морфей

@morpheus додає УНІКАЛЬНИЙ індекс, який сам по собі є індексом. Мені не подобається мати стовпець з ідентифікатором, який не є 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. Спробуйте це: ЗМІНИТЬ ТАБЛИЦЮ ІМЕНІЗАТИ ПЕРВИННИЙ КЛЮЧ, ЗМІНИТИ СТОЛБКУ ІД INT NOT NULL AUTO_INCREMENT ПЕРВИННИЙ КЛЮЧ
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
Charles Jenkins

подивіться, ваш код ви опублікували, пропустіть LTER, а не ALter, переконайтеся, що ви скопіювали все це
echo_Me

дякую, але зараз у мене така помилка: # 1064 - у вас є помилка у вашому синтаксисі SQL; перевірте посібник, який відповідає вашій версії сервера MySQL, на правильний синтаксис, який слід використовувати поблизу "ЗМІНИТИ ТАБЛИЦЮ користувачів ДОДАТИ ідентифікатор int НЕ НУЛЬ AUTO_INCREMENT ПЕРВИННИЙ КЛЮЧ (id)" у рядку 3 вибачте!
Чарльз Дженкінс

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

ну ви можете виконати ці кроки в моїй відповіді
echo_Me

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 за замовчуванням приємного дня


3
ALTER TABLE users ADD id int NOT NULL AUTO_INCREMENT primary key FIRST

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

ЗМІНИТЬ ТАБЛИЦЮ Вашу таблицю ПАДАЙТЕ ПЕРВИННИЙ КЛЮЧ

Add the new column like that

ALTER TABLE Ваша таблиця додавання стовпця Id Id INT NOT NULL AUTO_INCREMENT ПЕРШИЙ, ДОДАТИ основний КЛЮЧ Id (Id)

Буде переглянути таблицю та оновити AutoInc.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.