Maison >base de données >tutoriel mysql >Pourquoi MySQL renvoie-t-il l'erreur « DETERMINISTIC, NO SQL, or READS SQL DATA » avec la journalisation binaire activée ?

Pourquoi MySQL renvoie-t-il l'erreur « DETERMINISTIC, NO SQL, or READS SQL DATA » avec la journalisation binaire activée ?

Barbara Streisand
Barbara Streisandoriginal
2024-11-03 20:18:29273parcourir

Why Does MySQL Throw

Erreur : "DETERMINISTIC, NO SQL, or READS SQL DATA" Manquant dans la déclaration de fonction avec la journalisation binaire activée

Lors de l'importation d'une base de données dans MySQL, rencontrant l'erreur "1418 (HY000) : Cette fonction n'a aucun DETERMINISTIC, NO SQL ou READS SQL DATA dans sa déclaration et la journalisation binaire est activée" indique que la fonction en question n'a pas de déclaration appropriée.

Résolution :

Il existe deux méthodes pour résoudre ce problème :

  1. Exécuter la commande de la console MySQL :

    <code class="mysql">SET GLOBAL log_bin_trust_function_creators = 1;</code>

    Cette commande assouplit la vérification des fonctions non déterministes, permettant ainsi à l'importation de se poursuivre.

  2. Configurer mysql.ini :
    Ajouter la ligne suivante dans le fichier de configuration mysql.ini :

    log_bin_trust_function_creators = 1

Explication :

La journalisation binaire enregistre toutes les modifications apportées à la base de données. Par défaut, MySQL exige que les fonctions qui modifient les données soient déclarées comme DETERMINISTIC, NO SQL ou READS SQL DATA dans leurs déclarations pour garantir qu'elles peuvent être répliquées avec précision.

Déclarations déterministes pour les fonctions stockées :

Ces déclarations informent MySQL sur la nature de la fonction, guidant les décisions d'optimisation et de réplication.

  • DETERMINISTIC : Fonctions qui produisent toujours le même résultat pour les mêmes entrées, quels que soient les facteurs externes.
  • NON DÉTERMINISTE : Fonctions qui peuvent produire des résultats différents pour les mêmes entrées, telles que celles contenant des fonctions MySQL non déterministes (par exemple, NOW() , UUID()).
  • LECTURE DES DONNÉES SQL :Fonctions qui lisent les données de la base de données, sans les modifier.
  • NO SQL :Fonctions qui ne contiennent pas d'instructions SQL.

Remarque : Si la journalisation binaire est désactivée, le paramètre log_bin_trust_function_creators ne s'applique pas. Par conséquent, il est crucial de s'assurer que les déclarations déterministes appropriées sont spécifiées.

En implémentant l'une des solutions fournies, vous pouvez résoudre l'erreur et poursuivre l'importation de la base de données.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn