我试图修改一张表,在创建后将其主键列设置为 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 | +--------------------+
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
在我的情况下,只有在我加入not null
时它才起作用。我认为这是一个约束。
ALTER TABLE document MODIFY COLUMN document_id INT NOT NULL AUTO_INCREMENT;
您可以通过以下查询将auto_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;
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;
在使用auto_increment
指令之前,您必须指定列的类型,例如:ALTER TABLE document MODIFY COLUMN document_id INT AUTO_INCREMENT
。
MODIFY COLUMN
。 - shxfeeAUTO_INCREMENT
是列数据类型的一部分,您需要重新定义列的完整数据类型:
ALTER TABLE document
ALTER COLUMN document_id int AUTO_INCREMENT
alter table [table_name] modify column [column_name] [column_type] AUTO_INCREMENT;
ALTER TABLE document MODIFY COLUMN document_id INT auto_increment
最好也将document_id设为主键
ALTER TABLE document MODIFY COLUMN document_id INT auto_increment PRIMARY KEY;
ALTER TABLE document
MODIFY COLUMN document_id int AUTO_INCREMENT;
SET FOREIGN_KEY_CHECKS = 0; ALTER TABLE document DROP PRIMARY KEY; ALTER TABLE document MODIFY COLUMN document_id INT PRIMARY KEY AUTO_INCREMENT NOT NULL; SET FOREIGN_KEY_CHECKS = 1;
- Fernando