Maison > base de données > tutoriel mysql > 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 ?

Barbara Streisand
Libérer: 2024-10-31 16:16:02
original
850 Les gens l'ont consulté

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, c'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)
Copier après la connexion

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

  • DETERMINISTIC
  • AUCUN SQL
  • LIRE LES 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.

Correctifs de l'erreur

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

  1. Activez la variable log_bin_trust_function_creators :

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

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

      log_bin_trust_function_creators = 1;
      Copier après la connexion

    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 à la 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
      Copier après la connexion
    • 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
      Copier après la connexion
    • Pour 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
      Copier après la connexion

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, conduisant à des résultats différents 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.

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal