Para mim, diz: isso definiria várias chaves primárias. Estou usando InnoDB. Observe que já tenho 3 deles.
LMD
2
Eu definitivamente colocaria 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 * ...
StefanK
Como obter o primeiro lugar para a nova coluna 'id'
TipVisor
17
Coluna Existente
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:
SET UNIQUE_CHECKS=0;ALTERTABLE goods DISABLE KEYS;INSERTINTO goods (... your column names ...)SELECT... your column names FROM goods_old;ALTERTABLE goods ENABLE KEYS;SET UNIQUE_CHECKS=1;
SET AUTOCOMMIT =0;SET UNIQUE_CHECKS=0;SET FOREIGN_KEY_CHECKS=0;INSERTINTO 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.
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);
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 palavraPRIMARY
:fonte
FIRST
depoisAUTO_INCREMENT
, o que significa que aid
será 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 * ...
Coluna Existente
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:
fonte
Se sua mesa for muito grande, é melhor não usar a instrução:
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:
crie uma nova tabela com a chave primária e todos os índices necessários:
mova todos os dados da tabela antiga para a nova, desativando chaves e índices para acelerar a cópia:
- USE ISTO PARA TABELAS MyISAM :
OU
- USE ISTO PARA TABELAS InnoDB :
Leva 2.000 segundos para adicionar PK a uma tabela com aproximadamente 200 milhões de linhas.
fonte
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 é:
O que é apenas uma ligeira melhora em relação à primeira resposta. Se você quiser que ele fique em uma posição diferente, então
HTH, -ft
fonte
Use esta consulta,
fonte
Este código funciona no meu banco de dados mysql:
fonte
fonte
Tente isto,
fonte
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
id
coluna com chave primária de auto-incremento.Id
coluna foi bem adicionada a partir do primeiro elemento.O resultado da consulta foi:
ALTER TABLE
table_name
ADDid
INT NOT NULL AUTO_INCREMENT FIRST, ADD PRIMARY KEY (id
);fonte
Remova aspas para funcionar corretamente ...
fonte