将MySQL列更改为AUTO_INCREMENT


194

我试图AUTO_INCREMENT在事实发生后修改表使其成为主键列。我尝试了以下SQL,但是收到了语法错误通知。

ALTER TABLE document
ALTER COLUMN document_id AUTO_INCREMENT

我做错什么了吗?

+ -------------------- +
| VERSION()|
+ -------------------- +
| 5.0.75-0ubuntu10.2 |
+ -------------------- +

Answers:


379
ALTER TABLE document MODIFY COLUMN document_id INT auto_increment

3
我很好奇您为什么建议使用INT(4)。有什么特殊原因吗?
史蒂芬·奥克斯利

3
@Steven Oxley,因为我以这种方式声明了我的表。
C. Ross,2010年

30
指定括号之间的数字不会完全没有什么(好吧,几乎没有)为MySQL整数类型。唯一受数字影响的是显示宽度,这取决于客户端。但是请不要误以为它像VARCHAR和DECIMAL类型那样工作-在那种情况下,实际上可以指定您可以在其中存储的数据量,而INT的特殊形式总是可以存储精确的数据。相同的值范围
Roland Bouman 2010年

在执行此操作时,我总是会遇到主键错误,所以我要这样做:SET FOREIGN_KEY_CHECKS = 0; ALTER TABLE文档DROP PRIMARY KEY;ALTER TABLE文档MODIFY COLUMN document_id INT主键AUTO_INCREMENT不为NULL;SET FOREIGN_KEY_CHECKS = 1;
费尔南多(Fernando)

这在MySQL中似乎不起作用,因为您需要将列设置为主键,因为只允许一个列进行auto_increment(另请参见下面的Roland Bouman的答案
charlchad

74

Roman是正确的,但请注意,auto_increment列必须是PRIMARY KEY或UNIQUE KEY的一部分(在几乎100%的情况下,它应该是构成PRIMARY KEY的唯一列):

ALTER TABLE document MODIFY document_id INT AUTO_INCREMENT PRIMARY KEY

10
+1。如果在创建表时未定义,则需要主键。

1
此外,这意味着该列数据需要已经独特
Umair Malhi


7

执行此操作的SQL为:

ALTER TABLE `document` MODIFY COLUMN `document_id` INT AUTO_INCREMENT;

有几种原因可能导致您的SQL无法正常工作。首先,您必须重新指定数据类型(INT在这种情况下)。另外,您要更改的列必须被索引(它不一定是主键,但是通常这就是您想要的)。此外,AUTO_INCREMENT每个表只能有一个列。因此,您可能希望运行以下SQL(如果您的列未建立索引):

ALTER TABLE `document` MODIFY `document_id` INT AUTO_INCREMENT PRIMARY KEY;

您可以在MySQL文档中找到更多信息:http : //dev.mysql.com/doc/refman/5.1/en/alter-table.html(用于修改列语法)和http://dev.mysql.com/doc /refman/5.1/en/create-table.html,以获取有关指定列的更多信息。


6

您必须在auto_increment指令之前指定列的类型,即ALTER TABLE document MODIFY COLUMN document_id INT AUTO_INCREMENT


1
应该是MODIFY COLUMN
shxfee 2014年

5

AUTO_INCREMENT 是列数据类型的一部分,则必须再次定义列的完整数据类型:

ALTER TABLE document
ALTER COLUMN document_id int AUTO_INCREMENT

int以示例为例,您应该将其设置为该列之前的类型)



2

AUTO_INCREMENT 是列数据类型的一部分,则必须再次定义列的完整数据类型:

ALTER TABLE document
MODIFY COLUMN document_id int AUTO_INCREMENT

(以int为例,您应该将其设置为该列之前的类型)


2

您可以使用以下查询使document_id自动增加

ALTER TABLE document MODIFY COLUMN document_id INT auto_increment

最好也使document_id为主键

ALTER TABLE document MODIFY COLUMN document_id INT auto_increment PRIMARY KEY;

1
请注意,如果该列已经是主键,则无法再次声明它,否则它将给出有关多个主键的错误(您希望它在那里更聪明,并且看到它与我猜的是相同的主键) 。因此,在这种情况下,你只跳过主键,它不会影响该列现有主键设置
乔治Birbilis

2

下面的语句有效。请注意,您需要再次提及列名称的数据类型(重新声明该列之前的数据类型)。

ALTER TABLE document
MODIFY COLUMN document_id int AUTO_INCREMENT;

2

如果以上方法均无效,请尝试此操作。这是我在MYSQL中所做的,是的,您需要两次写入列名(document_id)。

ALTER TABLE document
CHANGE COLUMN document_id document_id INT(11) NOT NULL AUTO_INCREMENT ;

1

要修改mysql中的列,我们使用alter和Modify关键字。假设我们创建了一个像这样的表:

create table emp(
    id varchar(20),
    ename varchar(20),
    salary float
);

现在我们要使用自动增量将列ID的类型修改为整数。您可以使用以下命令执行此操作:

alter table emp modify column id int(10) auto_increment;

1

上表语法:

CREATE TABLE apim_log_request (TransactionId varchar(50) DEFAULT NULL);

要将TransactionId更改为自动递增,请使用此查询

ALTER TABLE apim_log_request MODIFY COLUMN TransactionId INT auto_increment;


1

像这样:

alter table document modify column id int(11) auto_increment;


0

再次重新定义列时,您必须再次指定数据类型并向其添加auto_increment,因为它是数据类型的一部分。

ALTER TABLE `document` MODIFY COLUMN `document_id` INT AUTO_INCREMENT;

0

将列设置为主键并同时将auto_increment设置为:

  mysql> ALTER TABLE persons MODIFY COLUMN personID INT auto_increment PRIMARY KEY;
    Query OK, 10 rows affected (0.77 sec)
    Records: 10  Duplicates: 0  Warnings: 0

    mysql>


-3

使用以下查询:

ALTER TABLE YourTable DROP COLUMN IDCol

ALTER TABLE YourTable ADD IDCol INT IDENTITY(1,1)
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.