Como corrigir o MySQL não pode adicionar erro de restrição de chave estrangeira?

Publicados: 2022-12-22

Como você corrige o erro “ Mysql Cannot Add Foreign Key Constraint ”? Você pode receber a seguinte mensagem de erro ao tentar adicionar uma restrição de chave estrangeira a uma tabela MySQL: “ ERRO 1215 (HY000): Não é possível adicionar restrição de chave estrangeira ”.

Um erro como este é muito geral e não fornece detalhes específicos sobre o motivo específico pelo qual o MySQL não pode inserir uma restrição de chave estrangeira em uma tabela. Para resolver esse problema, você precisará identificar a causa exata do problema.

Este artigo explicará o motivo do erro “#1215 – Não é possível adicionar restrição de chave estrangeira” do MySQL, como encontrar o motivo e como corrigi-lo com quatro métodos eficazes.

Como corrigir o MySQL não pode adicionar erro de restrição de chave estrangeira?

Qual é o motivo do erro MySQL “#1215 – Não é possível adicionar restrição de chave estrangeira”?

Este erro pode ter várias causas. Para determinar a causa desse erro, é melhor examinar a seção LATEST FOREIGN KEY ERROR do SHOW ENGINE INNODB STATUS.

Desta forma, você obterá uma melhor compreensão do problema. Poderá identificar o seu caso a partir da seguinte lista:

Normalmente, ao carregar dumps, a tabela ou índice ao qual a restrição se refere não existe

Às vezes, a tabela de banco de dados que os clientes desejam adicionar restrições não existe, resultando em uma mensagem de erro 1215.

No entanto, não há indicação de que a tabela não exista, portanto, é recomendável usar o comando para determinar quais tabelas estão disponíveis no banco de dados.

Execute SHOW TABLES ou SHOW CREATE TABLE em cada uma das tabelas pai. Qualquer tabela que retornar um erro 1146 indica que as tabelas foram criadas na ordem incorreta.

A solução é executar o CREATE TABLE ausente e tentar novamente ou desativar temporariamente as verificações de chave estrangeira. É essencial executar esta etapa durante as restaurações de backup nas quais referências circulares podem estar presentes.

Execute o seguinte código para corrigir o erro:

 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS; SET FOREIGN_KEY_CHECKS=0; SOURCE /backups/mydump.sql; -- restore your backup within THIS session SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS;

Tabelas ou índices na referência de restrição fazem uso indevido de aspas

Se você deseja diagnosticar esse erro, inspecione cada declaração FOREIGN KEY e certifique-se de que não haja aspas em torno dos qualificadores de objeto ou que haja aspas em torno da tabela e um par em torno de cada nome de coluna.

Isso pode ser resolvido não citando nada ou citando a tabela e a coluna separadamente.

A chave local, tabela estrangeira ou coluna nas referências de restrição tem um erro de digitação

É possível diagnosticar esse erro executando SHOW TABLES e SHOW COLUMNS e comparando as strings com aquelas especificadas em sua declaração REFERENCES. O erro de digitação deve ser corrigido assim que for descoberto.

A coluna à qual a restrição se refere não é do mesmo tipo ou largura que a coluna estrangeira

Para diagnóstico, use o pai SHOW CREATE TABLE para garantir que a coluna local e a coluna referenciada contenham o mesmo tipo de dados e largura.

O problema pode ser resolvido editando sua instrução DDL para garantir que a definição da coluna na tabela filho corresponda à da tabela pai.

O objeto estranho não é uma CHAVE de nenhum tipo

Para diagnosticar esse problema, use o pai SHOW CREATE TABLE para examinar a parte REFERENCES da tabela para garantir que a coluna apontando para ela não seja indexada.

Corrija o problema tornando a coluna uma KEY, UNIQUE KEY ou PRIMARY KEY.

A chave estrangeira é um PK ou UK com várias colunas, onde a coluna referenciada não é a mais à esquerda

Para diagnosticar esse erro, execute o comando pai SHOW CREATE TABLE para determinar se a parte REFERENCES aponta para uma coluna que está presente em alguns índices de várias colunas, mas não é a mais à esquerda em sua definição.

Você pode corrigir o problema adicionando um índice à tabela pai onde a coluna referenciada é a coluna mais à esquerda ou a única.

Conjuntos de caracteres/agrupamentos diferentes entre as duas tabelas/colunas

Para diagnosticar o problema, execute SHOW CREATE TABLE pai e verifique se as partes CHARACTER SET e COLLATE da coluna filha correspondem às da tabela pai.

Para corrigir isso, certifique-se de que o DDL da tabela filho corresponda ao conjunto de caracteres e ao agrupamento de sua tabela/coluna pai ou ALTER a tabela pai para que sua definição corresponda à definição do filho.

A tabela pai não está usando InnoDB

O problema pode ser diagnosticado executando SHOW CREATE TABLE parent e verificando ENGINE=INNODB.

ALTER a tabela pai para alternar de MySQL para InnoDB para resolver esse problema.

Como encontrar o motivo do erro “Não é possível adicionar restrição de chave estrangeira”?

Este erro não indica o motivo específico da incapacidade do MySQL de implementar uma restrição de chave estrangeira na tabela, o que é muito geral.

Para ajudar a resolver esse problema, você precisará identificar a causa exata. Você pode fazer isso executando a seguinte consulta em seu cliente MySQL:

 SHOW ENGINE INNODB STATUS;

Três campos devem ser retornados dessa consulta: Tipo, Nome e Status. O LATEST FOREIGN KEY ERROR pode ser identificado expandindo a coluna de status do resultado.

Esta seção visa identificar por que a última consulta de alteração falhou para que você possa corrigir o problema.

Geralmente, há uma incompatibilidade entre o tipo de coluna na tabela primária e a tabela externa como a causa desse problema.

O problema também pode ser causado por uma incompatibilidade entre os tipos de mecanismo de duas tabelas, como MyISAM e InnoDB.

Também é possível devido a diferentes agrupamentos entre as tabelas, uma usando UTF-8 e a outra usando latin1.

Você deve prestar atenção aos seguintes fatores:

Mecanismo : cada tabela deve ser configurada com o mesmo mecanismo de banco de dados, por exemplo, InnoDB.

Tipo de dados: em uma tabela, ambas as colunas devem ter o mesmo “ datatype. int(11) datatype. int(11) “, enquanto que, em outro, smallint(5) causará um problema.

Agrupamento : Para garantir a compatibilidade, os conjuntos de caracteres de ambas as colunas devem ser iguais, por exemplo, UTF8.

Cuidado : as colunas ainda podem ter uma coluna diferente, mesmo que suas tabelas tenham o mesmo Collation.

Único : as chaves estrangeiras devem se referir a campos exclusivos na tabela de referência, geralmente os primários.

Ungisned : É possível que uma tabela tenha chaves não assinadas e outra não tenha nenhuma chave não assinada.

Como corrigir o erro MySQL “#1215 – Não é possível adicionar restrição de chave estrangeira” (4 métodos)?

Tendo discutido as diferentes causas dessa mensagem de erro, passamos para a próxima etapa. Esse erro precisa ser corrigido, então vamos ver como fazer isso com quatro métodos eficazes.

Método 1: verifique a disponibilidade da mesa

Para começar a solucionar o erro, você pode verificar se a tabela existe executando o seguinte comando:

 show tables;

É evidente a partir deste código que a restrição pode ser criada desde que a tabela esteja disponível.

Método 2: certifique-se de que a tabela pai esteja usando o InnoDB

Uma investigação mais aprofundada pode ser conduzida verificando o mecanismo de armazenamento definido para a tabela de banco de dados. O seguinte comando pode ser usado para fazer isso:

 SHOW CREATE TABLE parent

O resultado é que você descobrirá que o InnoDB não é o mecanismo de armazenamento. Como ENGINE=MYISAM foi definido, você pode alterar o mecanismo de armazenamento executando o seguinte comando:

 ALTER TABLE parent ENGINE=INNODB;

Finalmente é possível corrigir o erro com este método.

Método 3: verifique se há citações inapropriadas

Para cada declaração FOREIGN KEY, assegure-se de que não sejam inseridas aspas ao redor dos qualificadores de objeto ou que aspas separadas cerquem os nomes da tabela e da coluna.

Com esse método, é necessário não citar nada ou citar a coluna e a tabela separadamente para corrigir o erro.

Método 4: verificando se a chave existe ou não

Ao inserir comandos do MySQL, é necessário garantir que o comando correto seja inserido. A verificação cruzada garante que o cliente não esteja fazendo referência a uma chave de tabela inexistente na tabela de destino.

Portanto, é necessário corrigir os clientes sobre como usar a chave na mesa. É possível que a coluna em uso para ON DELETE SET NULL não tenha uma definição nula em alguns casos.

Para evitar o erro 1215 do MySQL, você deve garantir que a coluna esteja definida com o valor nulo padrão.

Conclusão

Este artigo explicou o motivo do erro “#1215 – Não é possível adicionar restrição de chave estrangeira” do MySQL, como encontrar a causa e como corrigi-lo com quatro métodos eficazes.

Obrigado por reservar um tempo para revisar este artigo. É um prazer apresentá-lo a você. Na seção de comentários, por favor, poste quaisquer perguntas ou comentários.

Por favor, curta e siga nossas páginas no Facebook e Twitter se quiser se manter atualizado sobre as últimas notícias.