ALTER表-在MySQL中添加AUTOINCREMENT


72

我在MySQL的on列中创建了一个表itemID

创建表格后,现在我想将此列更改为AUTOINCREMENT

如何使用ALTER语句完成此操作

表定义:

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

我正在使用以下代码,但它抛出语法错误

错误:语法不正确

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


5
AUTOINCREMENT下划线:AUTO_INCREMENT....
Pacerier

Answers:


104
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中传递什么?
Shyam Dixit 2013年

4
ALTER TABLE ALLITEMS更改itemid itemid INT(10)AUTO_INCREMENT。您无需指定“ PRIMARY KEY”。它可能会导致错误:“定义了多个主键”。除此之外,很好的答案!
lepe

@ThinkCode何时使用CHANGEMODIFY COLUMN
Kasun Siyambalapitiya,2016年

-1; 通过不重新指定UNSIGNEDCHANGE子句,可以将其itemid转换为SIGNED整数,从而减小其最大值。
马克·阿默里

16

语法:

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

但是该表需要一个已定义的键(例如itemId上的主键)。


1
ex primary keyprimary keyitemid之间有什么区别?
Thufir 2014年

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

2
这应该是公认的答案。很少有人会需要使用负(带符号)id列。
卡尔·贝内特

7

在OP的现有表中添加AUTO_INCREMENT PRIMARY KEY的基本语法:

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

或者对于一个新表,这是docs中的语法示例:

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

陷阱和注意事项:

  • AUTO_INCREMENT列必须有它的索引。(通常,您希望将其作为PRIMARY KEY,但是MySQL不需要。)
  • 创建您的AUTO_INCREMENT专栏通常是一个好主意UNSIGNED。从文档:

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

  • 使用CHANGEorMODIFY子句创建列时AUTO_INCREMENT(或实际上,无论何时使用CHANGEorMODIFY子句),您都应小心包含该列的所有修饰符,例如NOT NULLor UNSIGNED,这些修饰符在调用时会出现在表定义中SHOW CREATE TABLE yourtable。否则,这些修饰符将丢失。

4
ALTER TABLE allitems
CHANGE itemid itemid INT(10) AUTO_INCREMENT;


-1
ALTER TABLE t_name modify c_name INT(10) AUTO_INCREMENT PRIMARY KEY;

尽管此代码段可以解决问题,但提供说明确实有助于提高您的帖子质量。请记住,您将来会为读者回答这个问题,而这些人可能不知道您提出代码建议的原因。也请尽量不要在代码中添加解释性注释,因为这会降低代码和解释的可读性!
再见StackExchange
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.