将MySQL列更改为自动增量

将MySQL列更改为自动增量,sql,mysql,alter-table,Sql,Mysql,Alter Table,我正试图修改一个表,使其主键列自动递增。我尝试了以下SQL,但收到了语法错误通知 altertable文档 更改列文档id自动增量 我做错了什么,还是这不可能 +--------------------+ | VERSION() | +--------------------+ | 5.0.75-0ubuntu10.2 | +--------------------+ +--------------------+ |版本(| +--------------------+ |5

我正试图修改一个表,使其主键列
自动递增
。我尝试了以下SQL,但收到了语法错误通知

altertable文档
更改列文档id自动增量
我做错了什么,还是这不可能

+--------------------+ | VERSION() | +--------------------+ | 5.0.75-0ubuntu10.2 | +--------------------+ +--------------------+ |版本(| +--------------------+ |5.0.75-0ubuntu10.2| +--------------------+
AUTO_INCREMENT
是列数据类型的一部分,您必须再次为列定义完整的数据类型:

ALTER TABLE document
ALTER COLUMN document_id int AUTO_INCREMENT
ALTER TABLE document
MODIFY COLUMN document_id int AUTO_INCREMENT

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

您必须在
auto_increment
指令之前指定列的类型,即
ALTER TABLE document MODIFY column document\u id int auto_increment

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


执行此操作的SQL是:

ALTER TABLE `document` MODIFY COLUMN `document_id` INT AUTO_INCREMENT;
SQL可能无法工作有几个原因。首先,必须重新指定数据类型(
INT
)。此外,您试图更改的列必须被索引(它不必是主键,但通常这是您想要的)。此外,每个表只能有一个
AUTO_INCREMENT
列。因此,您可能希望运行以下SQL(如果您的列没有索引):


您可以在MySQL文档中找到更多信息:有关修改列语法和指定列的更多信息。

AUTO\u INCREMENT
是列数据类型的一部分,您必须再次为列定义完整的数据类型:

ALTER TABLE document
ALTER COLUMN document_id int AUTO_INCREMENT
ALTER TABLE document
MODIFY COLUMN document_id int AUTO_INCREMENT

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

如果上面没有一个工作,请尝试此操作。这就是我在MYSQL中所做的,是的,您需要编写两次列名(document_id)


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


在我的例子中,它只在我将
设置为NOTNULL
时起作用。我认为这是一个限制

ALTER TABLE document MODIFY COLUMN document_id INT NOT NULL AUTO_INCREMENT;

为了修改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;

使用以下查询:

ALTER TABLE YourTable DROP COLUMN IDCol

ALTER TABLE YourTable ADD IDCol INT IDENTITY(1,1)
上一个表语法:

CREATE TABLE apim_log_request (TransactionId varchar(50) DEFAULT NULL);
要将TransactionId更改为自动增量,请使用此查询

ALTER TABLE apim_log_request MODIFY COLUMN TransactionId INT auto_increment;

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

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

您可以这样做:

 alter table [table_name] modify column [column_name] [column_type] AUTO_INCREMENT;

您可以使用以下查询使文档id自动递增

ALTER TABLE document MODIFY COLUMN document_id INT auto_increment
最好将文档id设置为主键

ALTER TABLE document MODIFY COLUMN document_id INT auto_increment PRIMARY KEY;
就这样,

alter table document modify column id int(11)自动递增

将列设置为主键并同时自动递增: 请尝试以下操作:

ALTER TABLE table_name MODIFY COLUMN id datatype auto_increment;

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

ALTER TABLE customers MODIFY COLUMN customer_id BIGINT NOT NULL AUTO_INCREMENT;
SET foreign_key_checks = 0;
但是,如果列是外键约束的一部分,则很可能会收到错误。因此,建议使用以下查询关闭外键检查:

ALTER TABLE customers MODIFY COLUMN customer_id BIGINT NOT NULL AUTO_INCREMENT;
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;

由于
SQL
标签附在问题后面,我真的认为所有答案都漏掉了一个要点

修改
命令在SQL server中不存在
,因此运行

ALTER TABLE Satellites MODIFY COLUMN SatelliteID INT auto_increment主键

在这种情况下,您可以将新列添加为
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 

我很好奇为什么你会建议使用INT(4)。有什么特别的原因吗?@Steven Oxley,因为我是这样声明我的表的。在括号之间指定一个数字对MySQL整数类型完全没有作用(好吧,几乎没有)。唯一可能受数字影响的是显示宽度,这取决于客户机。但是不要被欺骗,不要认为它和VARCHAR和DECIMAL类型一样工作-在这些情况下,可以存储在其中的数据量实际上是指定的,而INT的特殊风格总是允许存储完全相同的值范围。在执行此操作时,我总是会遇到主键错误,所以我要做的就是:设置FOREIGN\u KEY\u CHECKS=0;ALTER TABLE document DROP主键;ALTER TABLE document MODIFY COLUMN document\u id INT主键自动增量不为空;设置外键检查=1;这在MySQL中似乎不起作用,因为您需要将列设置为主键,因为只允许一列自动递增(另请参见+1。如果在创建表时未定义主键,则需要主键。这也意味着该列中的数据必须是唯一的。它应该是
MODIFY column
,这似乎只是所有其他答案的重复。请注意,如果该列已经是主键,则不能在那里再次声明它,否则它将给出关于不要有多个主键(你希望它更聪明一点,我猜它是同一个主键)。因此,在这种情况下,你只需跳过主键,它不会影响该列上现有的主键设置
SET foreign_key_checks = 0;
ALTER TABLE customers MODIFY COLUMN customer_id BIGINT NOT NULL AUTO_INCREMENT;
SET foreign_key_checks = 1;
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