2011-08-05 114 views
53

我在MySQL中創建了一個表,其列itemID。創建表後,現在我想將此列更改爲AUTOINCREMENT。這怎麼用ALTER語句來完成呢?ALTER表 - 在MySQL中添加AUTOINCREMENT

表定義:

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

我使用下面的代碼,但它拋出錯誤:語法不正確

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

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

+3

'AUTOINCREMENT'有下劃線:'AUTO_INCREMENT' .... – Pacerier

回答

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; 

我與CHANGEMODIFY關鍵字混淆之前太:

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

ALTER TABLE ALLITEMS MODIFY itemid INT(5); 

雖然我們在那裏,還要注意AUTO_INCREMENT也可以啓動預定義的號碼:

ALTER TABLE tbl AUTO_INCREMENT = 100; 
+1

我已經在SQL Server 2012中定義了身份,但是我正在嘗試將一些值傳遞給db。所以在那個地方(自動遞增),我需要在VS 2010中傳遞什麼? –

+2

ALTER TABLE ALLITEMS CHANGE itemid itemid INT(10)AUTO_INCREMENT。您不需要指定「PRIMARY KEY」。它可能會導致錯誤:「定義了多個主鍵」。除此之外,很好的答案! – lepe

+0

@ThinkCode何時使用CHANGE和MODIFY COLUMN? –

15

的語法:

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

但表需要一限定的鍵(上的itemId前主鍵)。

+1

什麼itemid上'ex主鍵'和'主鍵'之間的區別? – Thufir

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

這應該是被接受的答案。很少有人會需要使用負號(簽名)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

雖然此代碼片段可能會解決問題,但[包括解釋](// meta.stackexchange.com/questions/114762/explaining-entirely-code-based-answers)確實有助於提高帖子的質量。請記住,您將來會爲讀者回答問題,而這些人可能不知道您的代碼建議的原因。也請儘量不要使用解釋性註釋來擠佔代碼,因爲這會降低代碼和解釋的可讀性! – FrankerZ

1

添加一個AUTO_INCREMENT PRIMARY KEY到OP現有的表基本語法:從the docs

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

或新表,這裏的語法示例:

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

陷阱和需要注意的事項:

  • AUTO_INCREMENT列必須有索引。 (通常,你會希望它是PRIMARY KEY,但是MySQL不要求這樣做。)
  • AUTO_INCREMENT列設置爲通常是個好主意。從文檔:

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

  • 當使用CHANGEMODIFY條款做出柱AUTO_INCREMENT(或實際上每當您使用CHANGEMODIFY條款),你應該小心,以包括列的所有修飾,像NOT NULLUNSIGNED,當您致電SHOW CREATE TABLE yourtable時,它們會顯示在表格定義中。否則這些修飾符將會丟失。