"Si un ouvrier veut bien faire son travail, il doit d'abord affûter ses outils." - Confucius, "Les Entretiens de Confucius. Lu Linggong"
Page de garde > La programmation > Pourquoi est-ce que j'obtiens l'erreur « DETERMINISTIC, NO SQL, or READS SQL DATA » dans MySQL ?

Pourquoi est-ce que j'obtiens l'erreur « DETERMINISTIC, NO SQL, or READS SQL DATA » dans MySQL ?

Publié le 2024-11-13
Parcourir:920

Why Do I Get the \

Comprendre l'erreur : exigence de déclaration "DETERMINISTIC, NO SQL, or READS SQL DATA"

Lors de l'importation d'une base de données dans MySQL, il est possible pour rencontrer l'erreur suivante :

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)

Cette erreur indique qu'une fonction définie ou une procédure stockée ne dispose pas de l'un des éléments suivants déclarations dans sa définition :

  • DETERMINISTIC
  • NO SQL
  • READS DONNÉES SQL

Lorsque la journalisation binaire est activée dans MySQL, ces déclarations sont requises pour garantir l'intégrité des données et la cohérence de la réplication.

Corrections de l'erreur

Pour résoudre ce problème, vous pouvez utiliser l'une des deux méthodes suivantes :

  1. Activer log_bin_trust_function_creators Variable :

    • Dans la console MySQL, exécutez la commande suivante :

      SET GLOBAL log_bin_trust_function_creators = 1;
    • Vous pouvez également ajouter ce qui suit à votre fichier de configuration MySQL (par exemple, mysql.ini):

      log_bin_trust_function_creators = 1;

    L'activation de ce paramètre permet aux fonctions sans déclarations explicites d'être exécutées pendant la journalisation binaire.

  2. Ajouter la déclaration appropriée à la fonction ou Procédure :

    • Pour les fonctions qui produisent toujours la même sortie pour les mêmes paramètres d'entrée, utilisez la déclaration DETERMINISTIC. Par exemple :

      CREATE FUNCTION my_function() DETERMINISTIC
      BODY
       -- Your function logic
      END
    • Pour les fonctions qui ne contiennent aucune instruction SQL, utilisez la déclaration NO SQL.

      CREATE FUNCTION my_function() NO SQL
      BODY
       -- Your function logic
      END
    • Pour les fonctions qui lisent uniquement les données de la base de données, utilisez la déclaration READS SQL DATA.

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

Comprendre les déclarations de fonctions déterministes

Les fonctions non déterministes peuvent modifier les données ou utiliser des entrées imprévisibles, ce qui entraîne des conséquences différentes résultats pour les mêmes paramètres d’entrée. En tant que tel, il est important de déclarer avec précision le comportement des fonctions pour optimiser les performances et garantir l'intégrité des données.

La documentation MySQL fournit un guide complet des différentes options de déclaration de fonctions de fonctions et de procédures stockées, vous permettant de prendre des décisions éclairées pour chaque fonction. Les fausses déclarations peuvent avoir un impact sur les plans d'exécution et affecter les performances.

Dernier tutoriel Plus>

Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.

Copyright© 2022 湘ICP备2022001581号-3