100

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

有什么建议吗?:)

4

16 回答 16

143

尝试这个

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

对于现有的主键

于 2013-02-07T14:31:00.447 回答
89

如果您不关心 auto-id 是否用作PRIMARY KEY,您可以这样做

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

我只是这样做了,它奏效了。

于 2013-06-27T15:00:20.730 回答
44

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

 ALTER TABLE users ADD id int NOT NULL AUTO_INCREMENT primary key
于 2013-02-07T14:24:59.987 回答
26

首先你必须删除表的主键

ALTER TABLE nametable DROP PRIMARY KEY

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

ALTER TABLE nametable ADD id INT NOT NULL AUTO_INCREMENT PRIMARY KEY
于 2014-01-30T15:50:27.083 回答
18

好吧,你必须先删除你拥有的,auto_increment然后primary 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;
于 2013-02-07T14:27:45.047 回答
16

如果您运行以下命令:

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;

这应该适用于更改现有的列约束......!

于 2019-03-12T04:49:46.013 回答
10

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

 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;
于 2018-05-22T12:58:14.383 回答
5

只需将 ADD 更改为 MODIFY 即可!

代替

ALTER TABLE users ADD id int NOT NULL AUTO_INCREMENT

ALTER TABLE users MODIFY id int NOT NULL AUTO_INCREMENT;
于 2017-03-22T02:27:22.880 回答
4
ALTER TABLE users CHANGE id int( 30 ) NOT NULL AUTO_INCREMENT

整数参数基于我的默认 sql 设置祝你有美好的一天

于 2013-06-22T18:46:54.137 回答
3
ALTER TABLE users ADD id int NOT NULL AUTO_INCREMENT primary key FIRST
于 2014-01-27T04:40:23.720 回答
1

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

ALTER TABLE your_table_name ADD COLUMN id SERIAL NOT NULL PRIMARY KEY
于 2019-12-16T17:20:05.523 回答
0

这个 SQL 请求对我有用:

ALTER TABLE users
CHANGE COLUMN `id` `id` INT(11) NOT NULL AUTO_INCREMENT ;
于 2021-01-15T16:26:47.227 回答
0
ALTER TABLE `table` ADD `id` INT NOT NULL AUTO_INCREMENT unique

尝试这个。无需删除您的主键。

于 2018-11-12T13:43:04.790 回答
0

从表中删除主索引:

ALTER TABLE `tableName` DROP INDEX `PRIMARY`;

然后添加 id 列(没有主索引)。我使用了一个大整数,因为我将拥有大量数据,但 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;

我刚刚在我的一张桌子上试过这个,它似乎奏效了。

于 2021-04-27T14:44:08.240 回答
-1

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

ALTER TABLE Table1
DROP CONSTRAINT PK_Table1_Col1
GO

然后按原样编写您的查询。

于 2013-12-13T17:02:52.233 回答
-2

像这样进行:

Make a dump of your database first

Remove the primary key like that

ALTER TABLE yourtable DROP PRIMARY KEY

Add the new column like that

ALTER TABLE yourtable add column Id INT NOT NULL AUTO_INCREMENT FIRST,ADD primary KEY Id(Id)

将查看该表并更新 AutoInc。

于 2014-08-25T09:23:11.313 回答