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.