1
resposta

ERRO 1452

Não consigo inserir os dados nas colunas de cada tabela, como eu faço pra corrigir automaticamente o erro de todas as linhas ?

O arquivo está: INSERT INTO avaliacoes VALUES ('1001', '1001', '3397', '4', 'Ótima atendimento.'); ..................

Recomendação da IA foi: Apagar todos os INSERT INTO e corrigir declarando as colunas em avaliacoes ficando:

INSERT INTO avaliacoes (avaliacao_id, cliente_id, hospedagem_id, nota, comentario) VALUES ('1', '1', '8450', '2', 'Horrível localização.'),

('10', '10', '198', '2', 'Horrível atendimento.'), .............................. Porém qual comando eu uso pra alterar todas sem fazer isso manualmente?

1 resposta

Ola, Rayssa, tudo bem ?

O erro 1452 no MySQL ocorre quando você tenta inserir dados em uma tabela com uma chave estrangeira que não existe na tabela referenciada. Ou seja, a chave estrangeira precisa ter um valor correspondente na tabela relacionada, caso contrário, o MySQL gera esse erro.

No seu caso, parece que a tabela avaliacoes tem colunas com chaves estrangeiras para cliente_id e hospedagem_id, e você está tentando inserir valores que não existem nas tabelas correspondentes.

Para corrigir automaticamente sem ter que editar manualmente cada linha, você pode tentar:

  1. Verificar as tabelas de referência para garantir que os valores de cliente_id e hospedagem_id já existem nas tabelas de referência. Se eles não existirem, insira esses registros antes de inserir na tabela avaliacoes.

  2. Usar uma subconsulta para garantir que os dados que você está tentando inserir têm correspondência nas tabelas relacionadas. Exemplo:

    INSERT INTO avaliacoes (avaliacao_id, cliente_id, hospedagem_id, nota, comentario)
    SELECT '1', '1', '8450', '2', 'Horrível localização.'
    WHERE EXISTS (SELECT 1 FROM clientes WHERE cliente_id = 1)
    AND EXISTS (SELECT 1 FROM hospedagens WHERE hospedagem_id = 8450);
    

    Isso garante que você só insira os dados se cliente_id e hospedagem_id existirem nas tabelas correspondentes.

  3. Usar o comando ON DUPLICATE KEY UPDATE se você quiser evitar erros e atualizar os dados existentes. Isso pode ser útil se você quiser substituir valores duplicados:

    INSERT INTO avaliacoes (avaliacao_id, cliente_id, hospedagem_id, nota, comentario)
    VALUES ('1', '1', '8450', '2', 'Horrível localização.')
    ON DUPLICATE KEY UPDATE nota = '2', comentario = 'Horrível localização.';
    
  4. Revisar as chaves estrangeiras: Se você não precisa dessas restrições, pode temporariamente desabilitar a verificação de chaves estrangeiras:

    SET FOREIGN_KEY_CHECKS = 0;
    
    -- Agora você pode fazer o insert normalmente
    INSERT INTO avaliacoes (avaliacao_id, cliente_id, hospedagem_id, nota, comentario)
    VALUES ('1', '1', '8450', '2', 'Horrível localização.');
    
    SET FOREIGN_KEY_CHECKS = 1;
    

Mas, em geral, a melhor abordagem é garantir que os dados estejam consistentes com as tabelas de referência, corrigindo as referências e inserindo os dados necessários antes de tentar inserir na tabela com chaves estrangeiras.