Altere uma coluna do MySQL para AUTO_INCREMENT

194

Estou tentando modificar uma tabela para criar sua coluna de chave primária AUTO_INCREMENTapós o fato. Eu tentei o seguinte SQL, mas recebi uma notificação de erro de sintaxe.

ALTER TABLE document
ALTER COLUMN document_id AUTO_INCREMENT

Estou fazendo algo errado ou isso não é possível?

+ -------------------- +
| VERSÃO () |
+ -------------------- +
| 5.0.75-0ubuntu10.2 |
+ -------------------- +
Cruz
fonte

Respostas:

379
ALTER TABLE document MODIFY COLUMN document_id INT auto_increment
romano
fonte
3
Estou curioso para saber por que você sugeriria INT (4). Alguma razão em particular?
Steven Oxley
3
@ Steven Oxley porque eu declarei minha mesa dessa maneira.
C. Ross
30
Especificar um número entre parênteses não faz exatamente nada (ok, quase nada) para tipos inteiros do MySQL. A única coisa que pode ser influenciada pelo número é a largura da exibição, e cabe ao cliente fazer isso. Mas não se deixe enganar e pense que funciona da mesma maneira para os tipos VARCHAR e DECIMAL - nesses casos, a quantidade de dados que você pode armazenar lá é realmente especificada, enquanto um sabor específico do INT sempre permite o armazenamento exato mesma faixa de valores
Roland Bouman
Eu sempre recebo um erro de chave primária ao fazer essas operações, por isso tenho o seguinte: SET FOREIGN_KEY_CHECKS = 0; Documento ALTER TABLE DROP PRIMARY KEY; ALTER TABLE documento MODIFICAR COLUNA document_id INT PRIMARY KEY AUTO_INCREMENT NOT NULL; SET FOREIGN_KEY_CHECKS = 1;
Fernando
Isso não parece funcionar no MySQL porque você precisa definir a coluna como chave primária, pois apenas uma coluna pode ser auto_increment (veja também a resposta de Roland Bouman abaixo
charlchad
74

Roman está certo, mas observe que a coluna auto_increment deve fazer parte da PRIMARY KEY ou UNIQUE KEY (e em quase 100% dos casos, deve ser a única coluna que compõe a PRIMARY KEY):

ALTER TABLE document MODIFY document_id INT AUTO_INCREMENT PRIMARY KEY
Roland Bouman
fonte
10
+1. Chave primária necessária se não definida no momento da criação da tabela.
1
Além disso, isto significa que os dados em que as necessidades de coluna a ser já exclusivo
Umair Malhi
10

No meu caso, só funcionou quando eu coloquei not null. Eu acho que isso é uma restrição.

ALTER TABLE document MODIFY COLUMN document_id INT NOT NULL AUTO_INCREMENT;
Rabia Naz khan
fonte
7

O SQL para fazer isso seria:

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

Existem alguns motivos pelos quais seu SQL pode não funcionar. Primeiro, você deve especificar novamente o tipo de dados ( INTneste caso). Além disso, a coluna que você está tentando alterar deve ser indexada (ela não precisa ser a chave primária, mas geralmente é isso que você deseja). Além disso, pode haver apenas uma AUTO_INCREMENTcoluna para cada tabela. Portanto, convém executar o seguinte SQL (se sua coluna não estiver indexada):

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

Você pode encontrar mais informações na documentação do MySQL: http://dev.mysql.com/doc/refman/5.1/en/alter-table.html para a sintaxe da coluna de modificação e http://dev.mysql.com/doc /refman/5.1/en/create-table.html para obter mais informações sobre como especificar colunas.

Steven Oxley
fonte
6

Você deve especificar o tipo da coluna antes da auto_incrementdiretiva, ou seja ALTER TABLE document MODIFY COLUMN document_id INT AUTO_INCREMENT.

Håvard S
fonte
1
Deve serMODIFY COLUMN
shxfee
5

AUTO_INCREMENT faz parte do tipo de dados da coluna, é necessário definir o tipo de dados completo para a coluna novamente:

ALTER TABLE document
ALTER COLUMN document_id int AUTO_INCREMENT

( intcomo exemplo, você deve configurá-lo para o tipo que a coluna tinha antes)

Dan Soap
fonte
3

Você pode fazer assim:

 alter table [table_name] modify column [column_name] [column_type] AUTO_INCREMENT;
Aditya Kumar
fonte
Parece ser apenas uma repetição de todas as outras respostas.
Pang
2

AUTO_INCREMENT faz parte do tipo de dados da coluna, é necessário definir o tipo de dados completo para a coluna novamente:

ALTER TABLE document
MODIFY COLUMN document_id int AUTO_INCREMENT

(como exemplo, você deve defini-lo como o tipo que a coluna tinha antes)

KKK
fonte
2

Você pode usar a seguinte consulta para fazer com que document_id seja incrementado automaticamente

ALTER TABLE document MODIFY COLUMN document_id INT auto_increment

É preferível criar a chave primária document_id também

ALTER TABLE document MODIFY COLUMN document_id INT auto_increment PRIMARY KEY;
Azhar Zafar
fonte
1
Observe que, se essa coluna já for uma chave primária, você não poderá declará-la novamente; caso contrário, ocorrerá um erro sobre várias chaves primárias (você esperaria que fosse um pouco mais inteligente e veria que é a mesma chave primária, acho). . Portanto, nesse caso, você apenas pula a PRIMARY KEY e ela não afeta a configuração de chave primária existente nessa coluna
George Birbilis
2

A declaração abaixo funciona. Observe que você precisa mencionar o tipo de dados novamente para o nome da coluna (redecare o tipo de dados que a coluna era antes).

ALTER TABLE document
MODIFY COLUMN document_id int AUTO_INCREMENT;
user5082888
fonte
2

Se nenhuma das opções acima funcionar, tente isso. Foi o que fiz no MYSQL e sim, você precisa escrever o nome da coluna (document_id) duas vezes.

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

Para modificar a coluna no mysql, usamos alter and modify keywords. Suponha que tenhamos criado uma tabela como:

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

Agora queremos modificar o tipo do ID da coluna para inteiro com incremento automático. Você poderia fazer isso com um comando como:

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

Sintaxe de tabela anterior:

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

Para alterar o TransactionId para incremento automático, use esta consulta

ALTER TABLE apim_log_request MODIFY COLUMN TransactionId INT auto_increment;
Usman Yaqoob
fonte
1
alter table tbl_user MODIFY COLUMN id int(10) auto_increment;
Aminur Rahman
fonte
1

Bem assim:

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

mais próximo
fonte
0

Ao redefinir a coluna novamente, é necessário especificar o tipo de dados novamente e adicionar acréscimo automático a ele, pois faz parte do tipo de dados.

ALTER TABLE `document` MODIFY COLUMN `document_id` INT AUTO_INCREMENT;
Optimizer
fonte
0

Configurando a coluna como chave primária e incremento automático ao mesmo tempo:

  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>
Nesimi Taghizade
fonte
0

ALTER TABLE table_name MODIFY COLUMN id tipo de dados auto_increment;

Kartik Madnani
fonte
-3

Use as seguintes consultas:

ALTER TABLE YourTable DROP COLUMN IDCol

ALTER TABLE YourTable ADD IDCol INT IDENTITY(1,1)
Doug Cobain
fonte