2011-08-05 16 views
53

カラムitemIDでMySQLでテーブルを作成しました。テーブルを作成した後、この列を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でIDを定義しましたが、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の '主キー'と '主キー'の区別? – 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

OPの既存のテーブルにAUTO_INCREMENT PRIMARY KEY追加するための基本的な構文:

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

たり、新しいテーブルのは、ここthe docsから構文例を示します。

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

トラップと注釈する内容:

  • AUTO_INCREMENT列には索引が必要です。 (通常はPRIMARY KEYにする必要がありますが、MySQLではこれを必要としません)
  • のカラムを作成することをお勧めします。

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

  • (あなたがCHANGEMODIFY句を使用するときまたは実際)列AUTO_INCREMENTを作るためにCHANGEまたはMODIFY句を使用する場合は、あなたがNOT NULLのように、列のすべての修飾子を含めるように注意する必要があります:ドキュメントからまたはUNSIGNEDとなります。SHOW CREATE TABLE yourtableを呼び出すと、テーブル定義に表示されます。これらの修飾子は、それ以外の場合は失われます。
関連する問題