给现有表添加自动递增的ID?

117

我有一个预先存在的表格,包含'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

有什么建议吗?:)


你能发布一下你现有的表定义吗? - Taryn
请输出“describe users”的描述 - DKSan
尝试过了,但它只返回表格。你需要什么? - Charles Jenkins
@CharlesJenkins,您能选择正确的答案吗? - Wadih M.
MODIFY 也可以用作:ALTER TABLE users MODIFY id int NOT NULL AUTO_INCREMENT; /2019年8月/ - Vilas Joshi
17个回答

150

试一试

ALTER TABLE `users` ADD `id` INT NOT NULL AUTO_INCREMENT;

对于现有的主键


12
#1068 - 多个主键被定义 - Charles Jenkins
7
在 SQL Server 2008 中,将 'AUTO_INCREMENT' 替换为 'IDENTITY(1,1)' 对我行得通。 - Greg A
14
请注意,这将在表格中添加一个ID列作为最后一列。在查询中添加FIRST以使其成为表格中的第一列。 - Tobias Baumeister
9
为了避免“多个主键”的错误,在定义新主键之前,请先删除现有的主键:ALTER TABLE users DROP PRIMARY KEY, ADD id INT NOT NULL AUTO_INCREMENT PRIMARY KEY - Sean the Bean
9
要将其作为第一列,请使用FIRST,例如:ALTER TABLE tbl1 ADD id INT PRIMARY KEY AUTO_INCREMENT FIRST - Tahir Raza
我在语法上遇到了错误,这个对我有用: ALTER TABLE users ADD id INT NOT NULL AUTO_INCREMENT , ADD PRIMARY KEY (id); - lisandro

114

如果您不关心自动 ID 是否被用作 PRIMARY KEY,您可以这样做:

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

我刚刚做了这个,效果很好。


1
这对我有用,并将auto_increment id列设置为主键。 - reflexiv
4
FIRST 在那里有什么作用? - Cees Timmerman
20
关键字“FIRST”表示新列将成为表中的第一列。或者,您可以使用“AFTER existent_col_name”来指定特定位置。如果既不使用“FIRST”也不使用“AFTER”,则新列将添加在所有当前列之后。 - Ruben Ramirez Padron
如果我想在id上创建索引而不是主键怎么办? - morpheus
@morpheus 这将添加一个独特的索引,它本身就是一个索引。虽然我不喜欢有一个名为id的列,它不是主键。 - Arth
UNIQUE 对我很有帮助。我曾经苦苦挣扎地修改一个已经存在主键但需要自动增量的表格。谢谢 :) - Tower Jimmy

47

如果您想在现有表中添加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
6
为避免"多个主键"错误,在定义新主键之前,请删除现有的主键: ALTER TABLE users DROP PRIMARY KEY, ADD id INT NOT NULL AUTO_INCREMENT PRIMARY KEY - Sean the Bean

28

首先您需要移除表的主键

ALTER TABLE nametable DROP PRIMARY KEY

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

ALTER TABLE nametable ADD id INT NOT NULL AUTO_INCREMENT PRIMARY KEY

无法删除,然后添加id。将会得到“重复的列名'id'”错误。 - John Joe
3
@JohnJoe,那是因为你已经有了id列。尝试这样做:ALTER TABLE nametable DROP PRIMARY KEY,MODIFY COLUMN id INT NOT NULL AUTO_INCREMENT PRIMARY KEY。 - TwoCode

20

首先,您必须先删除您当前的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服务器版本相对应的手册,以获取正确的语法。在第1行附近出现了“ALTER TABLE users ADD id int NOT NULL AUTO_INCREMENT PRIMARY KEY(id)” - Charles Jenkins
看看你发布的代码,它缺少 LTER 而不是 ALter,请确保你复制了全部内容。 - echo_Me
谢谢,但现在我遇到了这个错误: #1064 - 您的SQL语法有误,请检查与您的MySQL服务器版本相对应的手册,以获取正确的语法使用方式。位于第3行附近:ALTER TABLE users ADD id int NOT NULL AUTO_INCREMENT PRIMARY KEY(id)抱歉! - Charles Jenkins
#1064 - 您的SQL语法有误;请检查与您的MySQL服务器版本相对应的手册,以获取正确的语法使用方式。(id)在第1行附近。 - Charles Jenkins
你可以按照我的回答中的步骤进行操作。 - echo_Me
显示剩余2条评论

18

如果您运行以下命令:

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;

这应该可以用于更改现有列的约束条件....!


11

如果存在,则删除表的主键:

 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;

7

从表中删除主索引:

ALTER TABLE `tableName` DROP INDEX `PRIMARY`;

添加id列(不需要主键索引)。我使用了big int因为我将拥有大量数据,但是INT(11)同样有效:

ALTER TABLE `tableName` ADD COLUMN `id` BIGINT(11) NOT NULL FIRST;

然后修改具有自增长功能的列(感谢php)。它需要成为主键:

ALTER TABLE `tableName ` MODIFY COLUMN `id` BIGINT(11) UNSIGNED PRIMARY KEY AUTO_INCREMENT;

我刚刚在我的一张表上尝试了这个方法,看起来它有效。

不过,也可以在单个查询中执行最后两个步骤:ALTER TABLE PremiumPackages ADD COLUMN id MEDIUMINT(8) UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT FIRST; - vdudouyt
它没有起作用。 - kta

6
只需将ADD改为MODIFY,它就能工作了!
替换
ALTER TABLE users ADD id int NOT NULL AUTO_INCREMENT

To

ALTER TABLE users MODIFY id int NOT NULL AUTO_INCREMENT;

4
ALTER TABLE users CHANGE id int( 30 ) NOT NULL AUTO_INCREMENT

整数参数基于我的默认SQL设置。 祝您拥有愉快的一天。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接