Tentei fazer isso, mas falhou:
alter table goods add column `id` int(10) unsigned primary AUTO_INCREMENT;
Alguém tem uma dica?
Tentei fazer isso, mas falhou:
alter table goods add column `id` int(10) unsigned primary AUTO_INCREMENT;
Alguém tem uma dica?
Respostas:
Depois de adicionar a coluna, você sempre pode adicionar a chave primária:
ALTER TABLE goods ADD PRIMARY KEY(id)
Quanto ao motivo pelo qual seu script não estava funcionando, você precisa especificar PRIMARY KEY, não apenas a palavra PRIMARY:
alter table goods add column `id` int(10) unsigned primary KEY AUTO_INCREMENT;
FIRSTdepois AUTO_INCREMENT, o que significa que a idserá a primeira coluna da tabela já existente. Caso contrário, será colocado no final da tabela como está escrito agora, o que pode ser um pouco confuso ao fazer algo simplesSELECT * ...
Se você quiser adicionar uma restrição de chave primária a uma coluna existente, todas as sintaxes listadas anteriormente falharão.
Para adicionar uma restrição de chave primária a uma coluna existente, use o formulário:
ALTER TABLE `goods`
MODIFY COLUMN `id` INT(10) UNSIGNED PRIMARY KEY AUTO_INCREMENT;
Se sua mesa for muito grande, é melhor não usar a instrução:
alter table goods add column `id` int(10) unsigned primary KEY AUTO_INCREMENT;
porque ele faz uma cópia de todos os dados em uma tabela temporária, altera a tabela e a copia de volta. Melhor fazer manualmente. Renomeie sua mesa:
rename table goods to goods_old;
crie uma nova tabela com a chave primária e todos os índices necessários:
create table goods (
id int(10) unsigned not null AUTO_INCREMENT
... other columns ...
primary key (id)
);
mova todos os dados da tabela antiga para a nova, desativando chaves e índices para acelerar a cópia:
- USE ISTO PARA TABELAS MyISAM :
SET UNIQUE_CHECKS=0;
ALTER TABLE goods DISABLE KEYS;
INSERT INTO goods (... your column names ...) SELECT ... your column names FROM goods_old;
ALTER TABLE goods ENABLE KEYS;
SET UNIQUE_CHECKS=1;
- USE ISTO PARA TABELAS InnoDB :
SET AUTOCOMMIT = 0; SET UNIQUE_CHECKS=0; SET FOREIGN_KEY_CHECKS=0;
INSERT INTO goods (... your column names ...) SELECT ... your column names FROM goods_old;
SET FOREIGN_KEY_CHECKS=1; SET UNIQUE_CHECKS=1; COMMIT; SET AUTOCOMMIT = 1;
Leva 2.000 segundos para adicionar PK a uma tabela com aproximadamente 200 milhões de linhas.
Não tenho certeza se isso importa para mais alguém, mas prefiro a tabela de id à primeira coluna do banco de dados. A sintaxe para isso é:
ALTER TABLE your_db.your_table ADD COLUMN `id` int(10) UNSIGNED PRIMARY KEY AUTO_INCREMENT FIRST;
O que é apenas uma ligeira melhora em relação à primeira resposta. Se você quiser que ele fique em uma posição diferente, então
ALTER TABLE unique_address ADD COLUMN `id` int(10) UNSIGNED PRIMARY KEY AUTO_INCREMENT AFTER some_other_column;
HTH, -ft
Use esta consulta,
alter table `table_name` add primary key(`column_name`);
Este código funciona no meu banco de dados mysql:
ALTER TABLE `goods`
ADD COLUMN `id` INT NOT NULL AUTO_INCREMENT,
ADD PRIMARY KEY (`id`);
ALTER TABLE GOODS MODIFY ID INT(10) NOT NULL PRIMARY KEY;
Tente isto,
alter table goods add column `id` int(10) unsigned primary key auto_increment
Para mim, nenhuma das sugestões funcionou, me dando os erros de sintaxe, então eu apenas tentei usar o phpmyadmin (versão 4.9.2), (10.4.10-MariaDB) e adicionei idcoluna com chave primária de auto-incremento. Idcoluna foi bem adicionada a partir do primeiro elemento.
O resultado da consulta foi:
ALTER TABLE table_nameADD idINT NOT NULL AUTO_INCREMENT FIRST, ADD PRIMARY KEY ( id);
Remova aspas para funcionar corretamente ...
alter table goods add column id int(10) unsigned primary KEY AUTO_INCREMENT;