我试图修改一个表,使其主键列AUTO_INCREMENT后的事实。我已经尝试了下面的SQL,但得到了一个语法错误通知。
ALTER TABLE document
ALTER COLUMN document_id AUTO_INCREMENT
是我做错了什么还是这不可能?
+--------------------+ | VERSION() | +--------------------+ | 5.0.75-0ubuntu10.2 | +--------------------+
我试图修改一个表,使其主键列AUTO_INCREMENT后的事实。我已经尝试了下面的SQL,但得到了一个语法错误通知。
ALTER TABLE document
ALTER COLUMN document_id AUTO_INCREMENT
是我做错了什么还是这不可能?
+--------------------+ | VERSION() | +--------------------+ | 5.0.75-0ubuntu10.2 | +--------------------+
AUTO_INCREMENT是列数据类型的一部分,你必须再次定义该列的完整数据类型:
ALTER TABLE document
ALTER COLUMN document_id int AUTO_INCREMENT
(以int为例,您应该将其设置为列之前的类型)
你必须在auto_increment指令之前指定列的类型,即ALTER TABLE document MODIFY column document_id INT auto_increment。
Roman是对的,但请注意auto_increment列必须是PRIMARY KEY或UNIQUE KEY的一部分(并且在几乎100%的情况下,它应该是组成PRIMARY KEY的唯一列):
ALTER TABLE document MODIFY document_id INT AUTO_INCREMENT PRIMARY KEY
执行此操作的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用于指定列的更多信息。
AUTO_INCREMENT是列数据类型的一部分,你必须再次定义该列的完整数据类型:
ALTER TABLE document
MODIFY COLUMN document_id int AUTO_INCREMENT
(以int为例,您应该将其设置为列之前的类型)
如果以上都不行,试试这个。这就是我在MYSQL中所做的,是的,你需要写两次列名(document_id)。
ALTER TABLE document
CHANGE COLUMN document_id document_id INT(11) NOT NULL AUTO_INCREMENT ;
下面的陈述是正确的。注意,您需要再次为列名提到数据类型(重新声明列名之前的数据类型)。
ALTER TABLE document
MODIFY COLUMN document_id int AUTO_INCREMENT;
在我的例子中,它只在我输入非空时起作用。我认为这是一个限制。
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;
您可以使用以下查询使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;
同时设置column为主键和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>
您可以通过以下查询将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;
由于SQL标签附在这个问题上,我真的认为所有的答案都错过了一个主要的点。
MODIFY命令在SQL server中不存在,所以当你运行
修改COLUMN的主键
在这种情况下,您可以将新列添加为INT IDENTITY
ALTER TABLE Satellites
ADD ID INT IDENTITY
CONSTRAINT PK_YourTable PRIMARY KEY CLUSTERED;
OR
DECLARE @id INT
SET @id = 0
UPDATE Satellites SET @id = SatelliteID = @id + 1