要将自动递增ID添加到现有表中?


82

我有一个预先存在的表,包含“ fname”,“ lname”,“ email”,“ password”和“ ip”。但是现在我想要一个自动增量列。但是,当我输入:

ALTER TABLE users
ADD id int NOT NULL AUTO_INCREMENT

我得到以下内容:

#1075 - Incorrect table definition; there can be only one auto column and it must be defined as a key

有什么建议吗?


您可以发布现有的表格定义吗?
塔琳

请后输出的describe users
DKSan

尝试过,但是它只是返回表。你需要什么?
查尔斯·詹金斯

@CharlesJenkins您能选择正确的答案吗?
Wadih M.

MODIFY也可以用作:ALTER TABLE用户MODIFY id int NOT NULL AUTO_INCREMENT; / *日期为2019年
维拉斯·乔希

Answers:


131

试试这个

ALTER TABLE `users` ADD `id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY

12
#1068-定义了多个主键
Charles Jenkins 2013年

6
在SQL Server 2008中,用'IDENTITY(1,1)'替换'AUTO_INCREMENT'对我有用。
格雷格A

13
请注意,这会将一个ID列添加为表的最后一列。添加FIRST到查询以使其成为此表中的第一个查询。
Tobias Baumeister

5
@CharlesJenkins为避免出现“多个主键”错误,请在定义新的主键之前先删除现有的主键:ALTER TABLE users DROP PRIMARY KEY, ADD id INT NOT NULL AUTO_INCREMENT PRIMARY KEY
肖恩·比恩

6
为了使第一列中,使用FIRSTALTER TABLE tbl1 ADD id INT PRIMARY KEY AUTO_INCREMENT FIRST
塔希尔·拉扎

72

如果您不在乎自动编号是否用作PRIMARY KEY,则可以这样做

ALTER TABLE `myTable` ADD COLUMN `id` INT AUTO_INCREMENT UNIQUE FIRST;

我就是这样做的,它起到了治疗作用。


1
这对我有用,并将auto_increment id列设置为主键。
reflexiv

3
FIRST那里做什么?
Cees Timmerman 2015年

12
@Cees Timmerman:关键字FIRST表示新列将是表中的第一列。或者,您可以使用AFTER existent_col_name来指定特定位置。如果既不使用FIRST也不使用AFTER,则在所有当前列之后添加新列。
鲁宾·拉米雷斯·帕德隆

如果我想在id而不是PK上创建索引怎么办?
morpheus,2016年

@morpheus这将添加一个UNIQUE索引,该索引本身就是一个索引。我不喜欢有一个叫id的列,虽然它不是PK。
Arth

34

如果要在现有表中添加AUTO_INCREMENT,则需要运行以下SQL命令:

 ALTER TABLE users ADD id int NOT NULL AUTO_INCREMENT primary key

1
那没有用!收到此错误:#1068-定义了多个主键
Charles Jenkins

4
Multiple primary key defined之所以会得到,是因为您已经在表上有了主键。一个表只能有一个主键。当它没有主键时在表上重试上述命令
cchi 16'Aug

3
为避免出现“多个主键”错误,请在定义新的主键之前先删除现有的主键:ALTER TABLE users DROP PRIMARY KEY, ADD id INT NOT NULL AUTO_INCREMENT PRIMARY KEY
肖恩·比恩

21

首先,您必须删除表的主键

ALTER TABLE nametable DROP PRIMARY KEY

现在您可以添加自动增量...

ALTER TABLE nametable ADD id INT NOT NULL AUTO_INCREMENT PRIMARY KEY

无法删除,然后添加ID。会得到Duplicate column name 'id'
约翰·乔

1
@JohnJoe,这是因为您已经有了id列。试试这个:ALTER TABLE nametable DROP PRIMARY KEY,MODIFY COLUMN ID INT NOT NULL AUTO_INCREMENT PRIMARY KEY
TwoCode

17

好了,您必须先删除auto_incrementprimary key,然后再添加,如下所示:

-- drop auto_increment capability
alter table `users` modify column id INT NOT NULL;
-- in one line, drop primary key and rebuild one
alter table `users` drop primary key, add primary key(id);
-- re add the auto_increment capability, last value is remembered
alter table `users` modify column id INT NOT NULL AUTO_INCREMENT;

1
收到此错误:#1064-您的SQL语法有错误;检查与您的MySQL服务器版本相对应的手册以获取正确的语法,以在“ LTER TABLE用户添加ID int NOT NULL AUTO_INCREMENT PRIMARY KEY(id)”附近使用第1行
Charles Jenkins 2013年

看看您的代码,您将其发布为LTER而不是ALTER,请确保您已复制所有内容
echo_Me 2013年

谢谢,但是现在我遇到了以下错误:#1064-您的SQL语法有错误;请检查与您的MySQL服务器版本相对应的手册,以获取在第3行“ ALTER TABLE用户添加ID int NOT NULL AUTO_INCREMENT PRIMARY KEY(id)”附近使用的正确语法。对不起!
查尔斯·詹金斯

得到了这个:#1064-您的SQL语法有错误;检查与您的MySQL服务器版本相对应的手册,以在第1行的'(id)'附近使用正确的语法
Charles Jenkins

好吧,您可以按照我的回答执行这些步骤
echo_Me 2013年

12

如果运行以下命令:

ALTER TABLE users ADD id int NOT NULL AUTO_INCREMENT PRIMARY KEY;

这将显示错误:

ERROR 1060 (42S21): Duplicate column name 'id'

这是因为此命令将尝试将命名列添加id到现有表中。

要修改现有列,您必须使用以下命令:

ALTER TABLE users MODIFY id int NOT NULL AUTO_INCREMENT PRIMARY KEY;

这应该用于更改现有的列约束。


6

删除表的主键(如果存在):

 ALTER TABLE `tableName` DROP PRIMARY KEY;

在表中添加自动递增列:

ALTER TABLE `tableName` ADD `Column_name` INT PRIMARY KEY AUTO_INCREMENT;

修改我们想作为主键的列:

alter table `tableName` modify column `Column_name` INT NOT NULL AUTO_INCREMENT PRIMARY KEY;

5

只需将ADD更改为MODIFY即可!

更换

ALTER TABLE users ADD id int NOT NULL AUTO_INCREMENT

ALTER TABLE users MODIFY id int NOT NULL AUTO_INCREMENT;


2
ALTER TABLE users ADD id int NOT NULL AUTO_INCREMENT primary key FIRST

0

检查具有不同列的现有主键。如果是,请使用以下方法删除主键:

ALTER TABLE Table1
DROP CONSTRAINT PK_Table1_Col1
GO

然后按原样编写查询。


0
ALTER TABLE `table` ADD `id` INT NOT NULL AUTO_INCREMENT unique

试试这个。无需删除主键。


0

对于PostgreSQL,您必须使用SERIAL而不是auto_increment。

ALTER TABLE your_table_name ADD COLUMN id SERIAL NOT NULL PRIMARY KEY

-1

像这样继续:

Make a dump of your database first

Remove the primary key like that

更改表yourtable DROP主键

Add the new column like that

ALTER TABLE yourtable添加列ID INT非空AUTO_INCREMENT FIRST,添加主键ID(Id)

将查看该表并更新AutoInc。

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.