ALTER表 - 在MySQL中添加AUTOINCREMENT

Sum*_*pta 65 mysql sql alter-table

我在MySQL中用on column创建了一个表itemID.创建表后,现在我想将此列更改为AUTOINCREMENT.如何使用ALTER语句完成此操作?

表定义:

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

我使用以下代码,但它抛出错误:语法不正确.

ALTER TABLE allitems
MODIFY itemid INT(10) UNSIGNED AUTOINCREMENT; 
Run Code Online (Sandbox Code Playgroud)

Thi*_*ode 93

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;
Run Code Online (Sandbox Code Playgroud)

我之前也CHANGEMODIFY关键词混淆了:

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

ALTER TABLE ALLITEMS MODIFY itemid INT(5);
Run Code Online (Sandbox Code Playgroud)

虽然我们在那里,但也请注意,AUTO_INCREMENT也可以从预定义的数字开始:

ALTER TABLE tbl AUTO_INCREMENT = 100;
Run Code Online (Sandbox Code Playgroud)

  • ALTER TABLE ALLITEMS CHANGE itemid itemid INT(10)AUTO_INCREMENT.您不需要指定"PRIMARY KEY".它可能导致错误:"定义了多个主键".除此之外,很棒的答案! (4认同)

ble*_*jzz 15

语法:

   ALTER TABLE `table1` CHANGE `itemId` `itemId` INT( 11 ) NOT NULL AUTO_INCREMENT 
Run Code Online (Sandbox Code Playgroud)

但是表需要一个定义的键(在itemId上是ex主键).


dee*_*see 13

ALTER TABLE `ALLITEMS`
    CHANGE COLUMN `itemid` `itemid` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT;
Run Code Online (Sandbox Code Playgroud)

  • 这应该是公认的答案.很少有人需要使用否定(签名)id列. (2认同)

Mar*_*ery 6

将AUTO_INCREMENT PRIMARY KEY添加到OP现有表的基本语法:

ALTER TABLE allitems
MODIFY itemid INT(10) UNSIGNED AUTO_INCREMENT PRIMARY KEY;
Run Code Online (Sandbox Code Playgroud)

或者对于新表,这是文档中的语法示例:

CREATE TABLE animals (
     id MEDIUMINT NOT NULL AUTO_INCREMENT,
     name CHAR(30) NOT NULL,
     PRIMARY KEY (id)
);
Run Code Online (Sandbox Code Playgroud)

陷阱和注意事项:

  • AUTO_INCREMENT列必须有它的索引.(通常,你会希望它是PRIMARY KEY,但MySQL并不需要它.)
  • 制作AUTO_INCREMENT专栏通常是个好主意UNSIGNED.来自文档:

    如果可能,请使用UNSIGNED属性以允许更大的范围.

  • 当使用CHANGEor MODIFY子句来创建一个列时AUTO_INCREMENT(或者每当你使用CHANGEor MODIFY子句时),你应该小心地包括列的所有修饰符,比如,NOT NULL或者UNSIGNED,在你调用时显示在表定义中SHOW CREATE TABLE yourtable.否则这些修饰符将丢失.


小智 5

ALTER TABLE allitems
CHANGE itemid itemid INT(10) AUTO_INCREMENT;
Run Code Online (Sandbox Code Playgroud)