Estou tentando alterar uma tabela que não tem chave primária nem coluna auto_increment. Eu sei como adicionar uma coluna de chave primária, mas fiquei imaginando se é possível inserir dados na coluna de chave primária automaticamente (já tenho 500 linhas no banco de dados e quero dar o ID, mas não quero fazê-lo manualmente) . Alguma ideia? Muito obrigado.
mysql
primary-key
FlyingCat
fonte
fonte
alter table
para adicionar a chave, mas o MySQL não gera IDs para campos que ainda não os possuem. Você precisará atualizar manualmente os campos existentes e garantir que seu novo incremento automático inicie com o deslocamento correto - o padrão é '1' e você acabaria com erros de chave duplicados.Respostas:
Uma
ALTER TABLE
declaração adicionando aPRIMARY KEY
coluna funciona corretamente em meus testes:Em uma tabela temporária criada para fins de teste, a instrução acima criou a
AUTO_INCREMENT
id
coluna e inseriu valores de incremento automático para cada linha existente na tabela, começando com 1.fonte
FIRST
por exemploALTER TABLE tbl1 ADD id INT PRIMARY KEY AUTO_INCREMENT FIRST;
LAST_INSERT_ID()
esse valorSELECT * FROM table_name WHERE id = LAST_INSERT_ID()
e a maioria das APIs da linguagem de programação oferece alguma função / método para retornar esse valor no código do aplicativo.suponha que você não tenha coluna para incremento automático, como id, no, adicione-a usando a seguinte consulta:
Se você tiver uma coluna, altere para o incremento automático usando a seguinte consulta:
fonte
FIRST
no final?id
coluna a primeira da tabela, em oposição à última, que é o comportamento padrão.sim, algo como isso faria isso, talvez não seja o melhor, você pode querer fazer um backup
observe que o que
any_field
você selecionou deve ser o mesmo durante a atualização.fonte
Para pessoas como eu, obtendo um
Multiple primary key defined
erro, tente:No MySQL v5.5.31, isso definiu a
id
coluna como a chave primária para mim e preencheu cada linha com um valor incremental.fonte
O mais fácil e rápido que eu acho é esse
fonte
Consegui adaptar essas instruções, pegue uma tabela com uma chave primária sem incremento existente e adicione uma chave primária com incremento à tabela e crie uma nova chave primária composta com as chaves antigas e novas como uma chave primária composta usando o seguinte código:
Quando isso é feito, o campo _USER_ID existe e possui todos os valores numéricos da chave primária exatamente como você esperaria. Com a "DROP TABLE" na parte superior, você pode executar isso repetidamente para experimentar variações.
O que não consegui trabalhar é a situação em que há FOREIGN KEYs de entrada que já apontam para o campo USER_ID. Recebo essa mensagem quando tento fazer um exemplo mais complexo com uma chave estrangeira recebida de outra tabela.
Eu estou supondo que eu preciso derrubar todas as chaves estrangeiras antes de fazer a tabela ALTER e depois reconstruí-las depois. Por enquanto, porém, eu queria compartilhar essa solução com uma versão mais desafiadora da pergunta original, caso outras pessoas entrassem nessa situação.
fonte
Exporte sua tabela, esvazie sua tabela, adicione campo como INT exclusivo, altere-o para AUTO_INCREMENT e importe sua tabela novamente exportada anteriormente.
fonte
Você pode adicionar uma nova coluna Chave Primária a uma tabela existente, que pode ter números de sequência, usando o comando:
fonte
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'IDENTITY' at line 1
Eu estava enfrentando o mesmo problema, então o que fiz soltei o campo da chave primária, depois recriei-a e verifiquei que ela é incremental automática. Isso funcionou para mim. Espero que ajude os outros
fonte
ALTER TABLE tableName MODIFY tableNameID MEDIUMINT NÃO NULL AUTO_INCREMENT ;
Aqui tableName é o nome da sua tabela,
tableName é o nome da sua coluna principal, que deve ser modificado
MEDIUMINT é um tipo de dados da sua chave primária existente
AUTO_INCREMENT, você precisa adicionar apenas auto_increment após não nulo
Isso tornará a chave primária auto_increment ......
Espero que seja útil :)
fonte
Como escrever PHP para alterar o campo já existente (nome, neste exemplo) para torná-lo uma chave primária? É claro que sem adicionar campos 'id' adicionais à tabela.
Esta tabela foi criada atualmente - Número de registros encontrados: 4 nome VARCHAR (20) SIM raça VARCHAR (30) SIM cor VARCHAR (20) SIM peso SMALLINT (7) SIM
Esse é um resultado final buscado (TABELA DESCRIÇÃO) -
Número de registros encontrados: 4 nome VARCHAR (20) NÃO PRI raça VARCHAR (30) SIM cor VARCHAR (20) SIM peso SMALLINT (7) SIM
Em vez de conseguir isso -
Número de registros encontrados: 5 id int (11) NENHUM nome PRI VARCHAR (20) SIM raça VARCHAR (30) SIM cor VARCHAR (20) SIM peso SMALLINT (7) SIM
depois de tentar ..
$ query = "ALTER TABLE cavalos de corrida ADD id INT NÃO NULL AUTO_INCREMENT PRIMEIRO, ADD PRIMARY KEY (id)";
Como conseguir isso? -
Número de registros encontrados: 4 nome VARCHAR (20) NÃO PRI raça VARCHAR (30) SIM cor VARCHAR (20) SIM peso SMALLINT (7) SIM
ou seja, INSERIR / ADICIONAR ... etc. a chave primária NO primeiro registro de campo (sem adicionar um campo 'id' adicional, como declarado anteriormente.
fonte