"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Por que recebo o erro "DETERMINISTIC, NO SQL, or READS SQL DATA" no MySQL?

Por que recebo o erro "DETERMINISTIC, NO SQL, or READS SQL DATA" no MySQL?

Publicado em 13/11/2024
Navegar:749

Why Do I Get the \

Compreendendo o erro: Requisito de declaração "DETERMINISTIC, NO SQL, or READS SQL DATA"

Ao importar um banco de dados para o MySQL, é possível para encontrar o seguinte erro:

1418 (HY000) at line 10185: This function has none of DETERMINISTIC, NO SQL, or READS SQL DATA in its declaration and binary logging is enabled (you might want to use the less safe log_bin_trust_function_creators variable)

Este erro indica que uma função definida ou procedimento armazenado não possui uma das seguintes declarações em sua definição:

  • DETERMINISTIC
  • NO SQL
  • LÊ DADOS SQL

Quando o log binário está habilitado no MySQL, essas declarações são necessárias para garantir a integridade dos dados e a consistência da replicação.

Correções para o erro

Para resolver esse problema, você pode utilizar um dos dois métodos:

  1. Ativar a variável log_bin_trust_function_creators:

    • No console do MySQL, execute o seguinte comando:

      SET GLOBAL log_bin_trust_function_creators = 1;
    • Como alternativa, adicione o seguinte ao seu arquivo de configuração do MySQL (por exemplo, mysql.ini):

      log_bin_trust_function_creators = 1;

    Ativar esta configuração permite que funções sem declarações explícitas sejam executadas durante o registro binário.

  2. Adicione a declaração apropriada à função ou procedimento:

    • Para funções que sempre produzem a mesma saída para os mesmos parâmetros de entrada, use a declaração DETERMINÍSTICA. Por exemplo:

      CREATE FUNCTION my_function() DETERMINISTIC
      BODY
       -- Your function logic
      END
    • Para funções que não contêm nenhuma instrução SQL, use a declaração NO SQL.

      CREATE FUNCTION my_function() NO SQL
      BODY
       -- Your function logic
      END
    • Para funções que apenas leem dados do banco de dados, use a declaração READS SQL DATA.

      CREATE FUNCTION my_function() READS SQL DATA
      BODY
       -- Your function logic
      END

Compreendendo as declarações de funções determinísticas

Funções não determinísticas podem modificar dados ou usar entradas imprevisíveis, levando a diferentes resultados para os mesmos parâmetros de entrada. Como tal, é importante declarar com precisão o comportamento da função para otimizar o desempenho e garantir a integridade dos dados.

A documentação do MySQL fornece um guia completo para as várias opções de declaração de função de função e procedimento armazenado, permitindo que você tome decisões informadas para cada função. Declarações incorretas podem impactar os planos de execução e afetar o desempenho.

Tutorial mais recente Mais>

Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.

Copyright© 2022 湘ICP备2022001581号-3