Zmień kolumnę MySQL na AUTO_INCREMENT

194

Próbuję zmodyfikować tabelę, aby AUTO_INCREMENTpo fakcie była kolumną klucza podstawowego . Próbowałem następującego SQL, ale otrzymałem powiadomienie o błędzie składni.

ALTER TABLE document
ALTER COLUMN document_id AUTO_INCREMENT

Czy robię coś źle, czy to nie jest możliwe?

+ -------------------- +
| WERSJA () |
+ -------------------- +
| 5.0.75-0ubuntu10.2 |
+ -------------------- +
Krzyż
źródło

Odpowiedzi:

379
ALTER TABLE document MODIFY COLUMN document_id INT auto_increment
rzymski
źródło
3
Jestem ciekawy, dlaczego sugerowałbyś INT (4). Jakiś konkretny powód?
Steven Oxley,
3
@Steven Oxley, ponieważ tak zadeklarowałem swój stolik.
C. Ross
30
Określenie liczby między nawiasami nie robi nic (dobrze, prawie nic) dla typów całkowitych MySQL. Jedyną rzeczą, na którą może mieć wpływ liczba, jest szerokość wyświetlania, i to od klienta zależy. Ale nie daj się zwieść i pomyśl, że działa tak, jak działa w przypadku typów VARCHAR i DECIMAL - w takich przypadkach ilość danych, które możesz tam przechowywać, jest faktycznie określona, ​​podczas gdy określony smak INT zawsze pozwala na przechowywanie dokładnego ten sam zakres wartości
Roland Bouman
Podczas wykonywania tych operacji zawsze pojawia się błąd klucza podstawowego, więc mam to, co robię: SET FOREIGN_KEY_CHECKS = 0; ALTER TABLE dokument DROP PRIMARY KEY; ALTER TABLE dokument MODIFY COLUMN document_id INT PODSTAWOWY KLUCZ AUTO_INCREMENT NOT NULL; ZESTAW FOREIGN_KEY_CHECKS = 1;
Fernando
Wydaje się, że to nie działa w MySQL, ponieważ musisz ustawić kolumnę jako klucz podstawowy, ponieważ tylko jedna kolumna może być auto_increment (zobacz także odpowiedź Rolanda
Boumana
74

Roman ma rację, ale należy zauważyć, że kolumna auto_increment musi być częścią KLUCZA PODSTAWOWEGO lub UNIKALNEGO KLUCZA (aw prawie 100% przypadków powinna to być jedyna kolumna, która składa się z KLUCZA PODSTAWOWEGO):

ALTER TABLE document MODIFY document_id INT AUTO_INCREMENT PRIMARY KEY
Roland Bouman
źródło
10
+1. Klucz podstawowy wymagany, jeśli nie został zdefiniowany w momencie tworzenia tabeli.
1
Oznacza to również, że dane w tej kolumnie muszą być już unikalne
Umair Malhi
10

W moim przypadku działało to tylko wtedy, gdy wstawiłem not null. Myślę, że to ograniczenie.

ALTER TABLE document MODIFY COLUMN document_id INT NOT NULL AUTO_INCREMENT;
Rabia Naz khan
źródło
7

Aby to zrobić, SQL:

ALTER TABLE `document` MODIFY COLUMN `document_id` INT AUTO_INCREMENT;

Istnieje kilka powodów, dla których SQL może nie działać. Najpierw musisz ponownie określić typ danych ( INTw tym przypadku). Ponadto kolumna, którą próbujesz zmienić, musi zostać zindeksowana (nie musi to być klucz podstawowy, ale zwykle tego właśnie potrzebujesz). Ponadto AUTO_INCREMENTdla każdej tabeli może być tylko jedna kolumna. Możesz więc uruchomić następujący SQL (jeśli twoja kolumna nie jest zaindeksowana):

ALTER TABLE `document` MODIFY `document_id` INT AUTO_INCREMENT PRIMARY KEY;

Więcej informacji można znaleźć w dokumentacji MySQL: http://dev.mysql.com/doc/refman/5.1/en/alter-table.html w celu zmodyfikowania składni kolumn i http://dev.mysql.com/doc /refman/5.1/en/create-table.html, aby uzyskać więcej informacji na temat określania kolumn.

Steven Oxley
źródło
6

Musisz określić typ kolumny przed auto_incrementdyrektywą, tj ALTER TABLE document MODIFY COLUMN document_id INT AUTO_INCREMENT.

Håvard S.
źródło
1
Powinno byćMODIFY COLUMN
shxfee
5

AUTO_INCREMENT jest częścią typu danych kolumny, musisz ponownie zdefiniować pełny typ danych dla kolumny:

ALTER TABLE document
ALTER COLUMN document_id int AUTO_INCREMENT

( intwzięty jako przykład, powinieneś ustawić go na typ, który wcześniej miała kolumna)

Dan Soap
źródło
3

Możesz to zrobić w następujący sposób:

 alter table [table_name] modify column [column_name] [column_type] AUTO_INCREMENT;
Aditya Kumar
źródło
To wydaje się być powtórzeniem wszystkich pozostałych odpowiedzi.
Pang
2

AUTO_INCREMENT jest częścią typu danych kolumny, musisz ponownie zdefiniować pełny typ danych dla kolumny:

ALTER TABLE document
MODIFY COLUMN document_id int AUTO_INCREMENT

(int jako przykład, powinieneś ustawić go na typ, który wcześniej miała kolumna)

KKK
źródło
2

Możesz użyć poniższego zapytania, aby automatycznie zwiększać wartość_dokumentu

ALTER TABLE document MODIFY COLUMN document_id INT auto_increment

Preferowane jest również utworzenie klucza podstawowego document_id

ALTER TABLE document MODIFY COLUMN document_id INT auto_increment PRIMARY KEY;
Azhar Zafar
źródło
1
Zauważ, że jeśli ta kolumna jest już kluczem podstawowym, nie możesz jej zadeklarować ponownie, w przeciwnym razie daje błąd dotyczący wielu kluczy podstawowych (można by się spodziewać, że jest tam nieco bardziej sprytny i zobaczysz, że jest to ten sam klucz podstawowy) . W takim przypadku wystarczy pominąć KLUCZ PODSTAWOWY i nie wpływa to na istniejące ustawienie klucza podstawowego w tej kolumnie
George Birbilis
2

Poniższe oświadczenie działa. Pamiętaj, że musisz ponownie wspomnieć o typie danych dla nazwy kolumny (ponownie określ typ danych, którym była wcześniej kolumna).

ALTER TABLE document
MODIFY COLUMN document_id int AUTO_INCREMENT;
użytkownik5082888
źródło
2

Jeśli żadna z powyższych czynności nie działa, spróbuj tego. Tak zrobiłem w MYSQL i tak, musisz dwukrotnie wpisać nazwę kolumny (id_dokumentu).

ALTER TABLE document
CHANGE COLUMN document_id document_id INT(11) NOT NULL AUTO_INCREMENT ;
Susie
źródło
1

Aby zmodyfikować kolumnę w mysql, używamy modyfikować i modyfikować słowa kluczowe. Załóżmy, że utworzyliśmy tabelę:

create table emp(
    id varchar(20),
    ename varchar(20),
    salary float
);

Teraz chcemy zmodyfikować typ identyfikatora kolumny na liczbę całkowitą z przyrostem automatycznym. Możesz to zrobić za pomocą polecenia:

alter table emp modify column id int(10) auto_increment;
solarissmoke
źródło
1

Poprzednia składnia tabeli:

CREATE TABLE apim_log_request (TransactionId varchar(50) DEFAULT NULL);

Aby zmienić TransactionId na auto increment, użyj tego zapytania

ALTER TABLE apim_log_request MODIFY COLUMN TransactionId INT auto_increment;
Usman Yaqoob
źródło
1
alter table tbl_user MODIFY COLUMN id int(10) auto_increment;
Aminur Rahman
źródło
1

Takie jak to:

alter table document modify column id int(11) auto_increment;

apemost
źródło
0

Gdy ponownie definiujesz kolumnę, musisz ponownie określić typ danych i dodać do niego auto_increment, ponieważ jest on częścią typu danych.

ALTER TABLE `document` MODIFY COLUMN `document_id` INT AUTO_INCREMENT;
Optymalizator
źródło
0

Ustawienie kolumny jako klucza podstawowego i auto_increment jednocześnie:

  mysql> ALTER TABLE persons MODIFY COLUMN personID INT auto_increment PRIMARY KEY;
    Query OK, 10 rows affected (0.77 sec)
    Records: 10  Duplicates: 0  Warnings: 0

    mysql>
Nesimi Taghizade
źródło
0

ALTER TABLE nazwa_tabeli MODIFY COLUMN id typ danych auto_increment;

Kartik Madnani
źródło
-3

Skorzystaj z następujących zapytań:

ALTER TABLE YourTable DROP COLUMN IDCol

ALTER TABLE YourTable ADD IDCol INT IDENTITY(1,1)
Doug Cobain
źródło