Dodać identyfikator automatycznego przyrostu do istniejącej tabeli?

87

Mam już istniejącą tabelę zawierającą „fname”, „lname”, „email”, „password” i „ip”. Ale teraz chcę mieć kolumnę z automatycznym zwiększaniem. Jednak kiedy wchodzę:

ALTER TABLE users
ADD id int NOT NULL AUTO_INCREMENT

Otrzymuję następujące informacje:

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

Jakakolwiek rada?:)

Charles Jenkins
źródło
czy możesz opublikować istniejącą definicję tabeli?
Taryn
proszę opublikować wyjściedescribe users
DKSan
próbowałem tego, ale po prostu zwraca tabelę. czego potrzebujesz?
Charles Jenkins,
@CharlesJenkins Czy mógłbyś wybrać poprawną odpowiedź?
Wadih M.
MODIFY może być również użyte jako: ALTER TABLE użytkownicy MODIFY id int NOT NULL AUTO_INCREMENT; / * AUG z 2019 r. * /
Vilas Joshi

Odpowiedzi:

134

Spróbuj tego

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

dla istniejącego klucza podstawowego

Muhammad Asif Mahmood
źródło
12
# 1068 - Zdefiniowano wiele kluczy podstawowych
Charles Jenkins,
6
W SQL Server 2008 zastąpienie „AUTO_INCREMENT” przez „IDENTITY (1,1)” działało dla mnie.
Greg A
14
Zauważ, że dodaje to kolumnę ID jako ostatnią kolumnę w tabeli. Dodaj FIRSTdo zapytania, aby ustawić je jako pierwsze w tej tabeli.
Tobias Baumeister,
5
@CharlesJenkins Aby uniknąć błędu „Wiele kluczy podstawowych”, usuń istniejący klucz podstawowy przed zdefiniowaniem nowego:ALTER TABLE users DROP PRIMARY KEY, ADD id INT NOT NULL AUTO_INCREMENT PRIMARY KEY
Sean the Bean
7
Aby było to pierwsza kolumna, użyj FIRSTnp.ALTER TABLE tbl1 ADD id INT PRIMARY KEY AUTO_INCREMENT FIRST
Tahir Raza
75

Jeśli nie obchodzi Cię, czy auto-id jest używane jako PRIMARY KEY, możesz to zrobić

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

Właśnie to zrobiłem i zadziałało świetnie.

Coderer
źródło
1
To zadziałało dla mnie i ustawiłem kolumnę auto_increment id jako klucz podstawowy.
refleksyjna
3
Co FIRSTtam robi?
Cees Timmerman
13
@Cees Timmerman: Słowo kluczowe FIRST wskazuje, że nowa kolumna będzie pierwszą kolumną w tabeli. Alternatywnie możesz określić konkretną pozycję za pomocą AFTER existent_col_name. Jeśli nie użyto FIRST ani AFTER, nowa kolumna jest dodawana po wszystkich bieżących kolumnach.
Ruben Ramirez Padron
co jeśli chcę utworzyć indeks na podstawie identyfikatora, ale nie PK?
morfeusz
@morpheus dodaje to UNIQUE index, który jest indeksem sam w sobie. Nie podoba mi się jednak posiadanie kolumny o nazwie id, która nie jest PK.
Arth
38

Jeśli chcesz dodać AUTO_INCREMENT do istniejącej tabeli, musisz uruchomić następujące polecenie SQL:

 ALTER TABLE users ADD id int NOT NULL AUTO_INCREMENT primary key
Bhaskar Bhatt
źródło
1
to nie zadziałało! Mam ten błąd: # 1068 - Zdefiniowano wiele kluczy podstawowych
Charles Jenkins
4
otrzymujesz, Multiple primary key definedponieważ masz już klucz podstawowy na stole. Tabela może mieć tylko jeden klucz podstawowy. Ponów powyższe polecenie na stole, gdy nie ma klucza podstawowego
cchi
3
Aby uniknąć błędu „Wiele kluczy podstawowych”, usuń istniejący klucz podstawowy przed zdefiniowaniem nowego:ALTER TABLE users DROP PRIMARY KEY, ADD id INT NOT NULL AUTO_INCREMENT PRIMARY KEY
Sean the Bean
22

Najpierw musisz usunąć klucz podstawowy tabeli

ALTER TABLE nametable DROP PRIMARY KEY

a teraz możesz dodać autoincrement ...

ALTER TABLE nametable ADD id INT NOT NULL AUTO_INCREMENT PRIMARY KEY
jrltt
źródło
nie można upuścić, a następnie DODAJ identyfikator. DostanieDuplicate column name 'id'
John Joe
1
@JohnJoe, to dlatego, że masz już kolumnę id. Spróbuj tego: ALTER TABLE nametable DROP PRIMARY KEY, MODIFY COLUMN id INT NOT NULL AUTO_INCREMENT PRIMARY KEY
TwoCode
17

Cóż, najpierw musisz upuścić auto_incrementi primary keymasz, a następnie dodać swoje, w następujący sposób:

-- 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;
echo_Me
źródło
1
otrzymałem ten błąd: # 1064 - Masz błąd w składni SQL; sprawdź podręcznik, który odpowiada Twojej wersji serwera MySQL, aby znaleźć właściwą składnię do użycia w pobliżu 'LTER TABLE użytkownicy ADD id int NOT NULL AUTO_INCREMENT PRIMARY KEY (id)' w linii 1
Charles Jenkins
spójrz na swój kod, opublikowałeś go miss LTER, a nie ALter, upewnij się, że skopiowałeś wszystko
echo_Me
dzięki, ale teraz mam ten błąd: # 1064 - Masz błąd w składni SQL; sprawdź podręcznik, który odpowiada Twojej wersji serwera MySQL, aby znaleźć właściwą składnię, której należy użyć w pobliżu 'ALTER TABLE użytkownicy ADD id int NOT NULL AUTO_INCREMENT PRIMARY KEY (id)' w linii 3 przepraszam!
Charles Jenkins,
otrzymałem: # 1064 - Masz błąd w składni SQL; sprawdź podręcznik, który odpowiada Twojej wersji serwera MySQL, aby znaleźć właściwą składnię, której należy użyć w pobliżu '(id)' w linii 1
Charles Jenkins,
cóż, możesz wykonać te kroki w mojej odpowiedzi
echo_Me,
13

Jeśli uruchomisz następujące polecenie:

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

To pokaże ci błąd:

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

Dzieje się tak, ponieważ to polecenie spróbuje dodać nową kolumnę o nazwie iddo istniejącej tabeli.

Aby zmodyfikować istniejącą kolumnę, musisz użyć następującego polecenia:

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

To powinno działać w przypadku zmiany istniejącego ograniczenia kolumny ....!

Rajat Dabade
źródło
6

Usuń klucz podstawowy tabeli, jeśli istnieje:

 ALTER TABLE `tableName` DROP PRIMARY KEY;

Dodanie kolumny z autoinkrementacją do tabeli:

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

Zmodyfikuj kolumnę, którą chcemy traktować jako klucz podstawowy:

alter table `tableName` modify column `Column_name` INT NOT NULL AUTO_INCREMENT PRIMARY KEY;
Sunny Verma
źródło
5

Po prostu zmień DODAJ na ZMIEŃ i zadziała!

Zastąpić

ALTER TABLE users ADD id int NOT NULL AUTO_INCREMENT

Do

ALTER TABLE users MODIFY id int NOT NULL AUTO_INCREMENT;
John Joe
źródło
4
ALTER TABLE users CHANGE id int( 30 ) NOT NULL AUTO_INCREMENT

parametr integer jest oparty na moim domyślnym ustawieniu sql miłego dnia

Odhik Susanto
źródło
3
ALTER TABLE users ADD id int NOT NULL AUTO_INCREMENT primary key FIRST
php
źródło
1

W przypadku PostgreSQL musisz użyć SERIAL zamiast auto_increment.

ALTER TABLE your_table_name ADD COLUMN id SERIAL NOT NULL PRIMARY KEY
PauloBorba
źródło
0

Sprawdź, czy istnieje już klucz podstawowy z inną kolumną. Jeśli tak, usuń klucz podstawowy za pomocą:

ALTER TABLE Table1
DROP CONSTRAINT PK_Table1_Col1
GO

a następnie zapisz zapytanie tak, jak jest.

user3100184
źródło
0
ALTER TABLE `table` ADD `id` INT NOT NULL AUTO_INCREMENT unique

Spróbuj tego. Nie musisz porzucać klucza podstawowego.

刘斌文
źródło
-1

Postępuj w ten sposób:

Make a dump of your database first

Remove the primary key like that

ALTER TABLE stół DROP PRIMARY KEY

Add the new column like that

ALTER TABLE twoja tabela dodaj identyfikator kolumny INT NOT NULL AUTO_INCREMENT FIRST, ADD primary KEY ID (Id)

Tabela zostanie przejrzana, a funkcja AutoInc zaktualizowana.

Juhan
źródło