Maison > base de données > tutoriel mysql > Pourquoi MySQL renvoie-t-il une erreur concernant les fonctions déterministes lorsque la journalisation binaire est activée ?

Pourquoi MySQL renvoie-t-il une erreur concernant les fonctions déterministes lorsque la journalisation binaire est activée ?

Mary-Kate Olsen
Libérer: 2024-10-31 15:31:02
original
684 Les gens l'ont consulté

Why Does MySQL Throw an Error About Deterministic Functions When Binary Logging is Enabled?

Erreur MySQL : "Cette fonction n'a aucun élément DETERMINISTIC, NO SQL ou READS SQL DATA dans sa déclaration et la journalisation binaire est activée"

Lors de la tentative d'importation d'une base de données dans MySQL, une erreur peut se produire indiquant qu'une fonction ne dispose pas de l'une des déclarations suivantes dans sa déclaration : DETERMINISTIC, NO SQL ou READS SQL DATA. Cette erreur se produit lorsque la journalisation binaire est activée.

Résolution de l'erreur :

Cette erreur peut être résolue de deux manières :

  1. Configurer la console MySQL : Exécutez la commande suivante dans la console MySQL :

    SET GLOBAL log_bin_trust_function_creators = 1;
    Copier après la connexion
  2. Modifier le fichier de configuration : Ajoutez la ligne suivante au fichier de configuration mysql.ini :

    log_bin_trust_function_creators = 1;
    Copier après la connexion

Ces modifications permettent d'utiliser des fonctions non déterministes avec la journalisation binaire. Cependant, si la journalisation binaire est désactivée, ces paramètres n'affectent pas l'erreur.

Comprendre les déclarations de fonction :

  • DETERMINISTIC : Indique qu'une fonction produit toujours le même résultat pour les mêmes paramètres d'entrée.
  • NON DÉTERMINISTE : Indique au contraire, que le résultat d'une fonction peut varier pour les mêmes paramètres d'entrée.
  • LECTURE DES DONNÉES SQL : Spécifie explicitement qu'une fonction lira uniquement les données des bases de données.
  • NO SQL : Indique qu'une fonction ne contient aucune instruction SQL.
  • CONTIENT SQL : Indique qu'une fonction contient des instructions SQL mais ne modifie pas les données.

Il est important de noter que les fonctions qui contiennent des instructions non déterministes, tel que NOW() ou UUID(), doit être déclaré comme NON DÉTERMINISTE. De plus, les fonctions qui lisent les données d'un schéma non répliqué sont également non déterministes.

Bonnes pratiques :

L'approche idéale consiste à comprendre et à utiliser des déclarations déterministes pour les fonctions stockées. car ils aident à l’optimisation de la réplication. MySQL recommande de spécifier explicitement l'une des déclarations mentionnées dans la définition des fonctions stockées pour éviter des erreurs potentielles.

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