2011-08-05 17 views
53

Stworzyłem tabelę w MySQL z kolumną itemID. Po utworzeniu tabeli, teraz chcę zmienić tę kolumnę na AUTOINCREMENT. Jak to zrobić za pomocą instrukcji ALTER?ALTER table - dodanie AUTOINCREMENT w MySQL

definicja Tabela:

ALLITEMS (itemid int(10) unsigned, itemname varchar(50))

używam następujący kod, ale to jest rzucanie error: syntax nieprawidłowe.

ALTER TABLE allitems 
MODIFY itemid INT(10) UNSIGNED AUTOINCREMENT; 
+0

Duplikat: http://stackoverflow.com/questions/4795382/mysql-add-auto-increment-to-primary-key – lepe

+3

'AUTOINCREMENT' ma podkreślenia:' AUTO_INCREMENT' .... – Pacerier

Odpowiedz

81
CREATE TABLE ALLITEMS(
    itemid INT(10)UNSIGNED, 
    itemname VARCHAR(50) 
); 

ALTER TABLE ALLITEMS CHANGE itemid itemid INT(10)AUTO_INCREMENT PRIMARY KEY; 

DESC ALLITEMS; 

INSERT INTO ALLITEMS(itemname) 
VALUES 
    ('Apple'), 
    ('Orange'), 
    ('Banana'); 

SELECT 
    * 
FROM 
    ALLITEMS; 

Byłem zmieszany z CHANGE i MODIFY słów kluczowych przed zbyt:

ALTER TABLE ALLITEMS CHANGE itemid itemid INT(10)AUTO_INCREMENT PRIMARY KEY; 

ALTER TABLE ALLITEMS MODIFY itemid INT(5); 

Choć jesteśmy tam, trzeba pamiętać również, że AUTO_INCREMENT można również uruchomić z predefiniowanym numerem:

ALTER TABLE tbl AUTO_INCREMENT = 100; 
+1

Już zdefiniowałem tożsamość w serwerze SQL 2012, ale próbuję przekazać pewną wartość do bazy danych. Więc w tym miejscu (auto-inkrementacja), co muszę przekazać w VS 2010? –

+2

ZMIANA ELEMENTÓW STOLIKÓW ZMIANA itemid itemid INT (10) AUTO_INCREMENT. Nie musisz podawać "PRIMARY KEY". Może to spowodować błąd: "Zdefiniowano wiele kluczy podstawowych". Poza tym wspaniała odpowiedź! – lepe

+0

@ThinkCode Kiedy używać "ZMIANA" i "MODYFIKUJ KOLUMNĘ"? –

15

Składnia:

ALTER TABLE `table1` CHANGE `itemId` `itemId` INT(11) NOT NULL AUTO_INCREMENT 

ale tabela potrzebuje określonego klucza (key ex podstawowy na ItemID).

+1

co rozróżnienie między "ex klucz podstawowy" i "klucz podstawowy" na itemid? – Thufir

10
ALTER TABLE `ALLITEMS` 
    CHANGE COLUMN `itemid` `itemid` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT; 
+2

To powinna być zaakceptowana odpowiedź.Bardzo rzadko ktokolwiek będzie musiał użyć ujemnych (podpisanych) kolumn id. –

2
ALTER TABLE allitems 
CHANGE itemid itemid INT(10) AUTO_INCREMENT; 
1
ALTER TABLE tblcatalog 
    CHANGE COLUMN id id INT(11) NOT NULL AUTO_INCREMENT FIRST; 
-1
ALTER TABLE t_name modify c_name INT(10) AUTO_INCREMENT PRIMARY KEY; 
+0

Chociaż ten fragment kodu może rozwiązać pytanie, [w tym wyjaśnienie] (// meta.stackexchange.com/questions/114762/explaining-entirely-code-ans -answers) naprawdę pomaga poprawić jakość twojego posta. Pamiętaj, że odpowiadasz na pytanie przeznaczone dla czytelników w przyszłości, a te osoby mogą nie znać powodów sugestii dotyczących kodu. Proszę również nie tłumić kodu za pomocą komentarzy wyjaśniających, ponieważ zmniejsza to czytelność zarówno kodu, jak i objaśnień! – FrankerZ

1

Podstawowa składnia dodanie AUTO_INCREMENT PRIMARY KEY do PO w istniejącej tabeli:

ALTER TABLE allitems 
MODIFY itemid INT(10) UNSIGNED AUTO_INCREMENT PRIMARY KEY; 

Albo dla nowej tabeli, oto przykład składnia z the docs:

CREATE TABLE animals (
    id MEDIUMINT NOT NULL AUTO_INCREMENT, 
    name CHAR(30) NOT NULL, 
    PRIMARY KEY (id) 
); 

Pułapki i Rzeczy do zapamiętania:

  • Kolumna AUTO_INCREMENT musi mieć indeks. (Zwykle będziesz chciał, aby był to KLUCZ PRIMARY, ale MySQL tego nie wymaga).
  • Zazwyczaj dobrym pomysłem jest wykonanie kolumn AUTO_INCREMENTUNSIGNED. Od docs:

    Use the UNSIGNED attribute if possible to allow a greater range.

  • Przy zastosowaniu CHANGE lub MODIFY klauzuli zrobić kolumnę AUTO_INCREMENT (czy rzeczywiście ilekroć użyć CHANGE lub MODIFY klauzulę) należy uważać, aby uwzględnić wszystkie modyfikatory dla kolumny, jak NOT NULL lub UNSIGNED, które pojawiają się w definicji tabeli, gdy wywołujesz SHOW CREATE TABLE yourtable. Modyfikatory te zostaną utracone w inny sposób.
Powiązane problemy