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 |
+ -------------------- +

Odpowiedzi:


379
ALTER TABLE document MODIFY COLUMN document_id INT auto_increment

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

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;

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.


6

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


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)


3

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

 alter table [table_name] modify column [column_name] [column_type] AUTO_INCREMENT;

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)


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;

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;

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 ;

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;

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;


1

Takie jak to:

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


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;

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>


-3

Skorzystaj z następujących zapytań:

ALTER TABLE YourTable DROP COLUMN IDCol

ALTER TABLE YourTable ADD IDCol INT IDENTITY(1,1)
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.