219

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

ALTER TABLE document
ALTER COLUMN document_id AUTO_INCREMENT

我做错了什么还是不可能?

+--------------------+
| 版本() |
+--------------------+
| 5.0.75-0ubuntu10.2 |
+--------------------+
4

21 回答 21

427
ALTER TABLE document MODIFY COLUMN document_id INT auto_increment
于 2010-01-30T19:19:39.087 回答
86

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

ALTER TABLE document MODIFY document_id INT AUTO_INCREMENT PRIMARY KEY
于 2010-01-30T19:22:49.840 回答
12

就我而言,它仅在我放not null. 我认为这是一个约束。

ALTER TABLE document MODIFY COLUMN document_id INT NOT NULL AUTO_INCREMENT;
于 2015-08-11T04:02:45.227 回答
8

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

于 2010-01-30T19:22:11.877 回答
8

执行此操作的 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有关指定列的更多信息。

于 2010-01-30T19:32:18.330 回答
7

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

ALTER TABLE document
ALTER COLUMN document_id int AUTO_INCREMENT

int举个例子,你应该把它设置为该列之前的类型)

于 2010-01-30T19:21:31.727 回答
6

你可以这样做:

 alter table [table_name] modify column [column_name] [column_type] AUTO_INCREMENT;
于 2018-04-12T06:50:41.220 回答
5

您可以使用以下查询使 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;
于 2018-04-22T05:22:50.810 回答
4

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

ALTER TABLE document
MODIFY COLUMN document_id int AUTO_INCREMENT;
于 2015-07-05T17:30:43.493 回答
3

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

ALTER TABLE document
MODIFY COLUMN document_id int AUTO_INCREMENT

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

于 2014-12-07T17:39:24.617 回答
3

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

ALTER TABLE document
CHANGE COLUMN document_id document_id INT(11) NOT NULL AUTO_INCREMENT ;
于 2014-12-19T21:06:43.580 回答
3

同时设置列为主键和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>
于 2018-08-21T12:25:42.467 回答
3

您可以通过以下查询将 atuto_increment 约束应用于数据列:

ALTER TABLE customers MODIFY COLUMN customer_id BIGINT NOT NULL AUTO_INCREMENT;

但是,如果列是外键约束的一部分,您很可能会收到错误消息。因此,建议使用以下查询关闭 foreign_key_checks:

SET foreign_key_checks = 0;

因此,请改用以下查询:

SET foreign_key_checks = 0;
ALTER TABLE customers MODIFY COLUMN customer_id BIGINT NOT NULL AUTO_INCREMENT;
SET foreign_key_checks = 1;
于 2020-11-24T08:29:05.097 回答
2

要修改 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;
于 2016-07-16T06:07:46.420 回答
2
alter table tbl_user MODIFY COLUMN id int(10) auto_increment;
于 2017-02-24T19:12:54.770 回答
2

以前的表语法:

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

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

ALTER TABLE apim_log_request MODIFY COLUMN TransactionId INT auto_increment;
于 2017-08-18T13:47:21.483 回答
2

像这样:

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

于 2018-07-09T18:54:07.440 回答
1

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

ALTER TABLE `document` MODIFY COLUMN `document_id` INT AUTO_INCREMENT;
于 2017-12-08T12:52:17.403 回答
0

尝试以下操作:

ALTER TABLE table_name MODIFY COLUMN id datatype auto_increment;
于 2019-03-13T06:16:22.003 回答
-1

由于SQL标签附加到问题上,我真的认为所有答案都错过了一个重点。

MODIFYSQL server 中不存在命令,所以运行时会报错

ALTER TABLE Satellites MODIFY COLUMN SatelliteID INT auto_increment PRIMARY KEY;

在此处输入图像描述

在这种情况下,您可以将新列添加为INT IDENTITY

ALTER TABLE Satellites
   ADD ID INT IDENTITY
       CONSTRAINT PK_YourTable PRIMARY KEY CLUSTERED;

或者


使用此方法用增量数字填充现有的空索引,
DECLARE @id INT
SET @id = 0 
UPDATE Satellites SET @id = SatelliteID = @id + 1 
于 2021-01-07T07:55:58.437 回答
-3

使用以下查询:

ALTER TABLE YourTable DROP COLUMN IDCol

ALTER TABLE YourTable ADD IDCol INT IDENTITY(1,1)
于 2017-06-19T17:44:03.047 回答