Maison  >  Article  >  base de données  >  Pourquoi ma fonction MySQL génère-t-elle une erreur « 1418 (HY000) » concernant les déclarations déterministes ?

Pourquoi ma fonction MySQL génère-t-elle une erreur « 1418 (HY000) » concernant les déclarations déterministes ?

DDD
DDDoriginal
2024-11-02 12:22:30155parcourir

Why Does My MySQL Function Throw a

DETERMINISTE, AUCUN SQL ou LECTURE DES DONNÉES SQL dans la déclaration de fonction avec la journalisation binaire activée

Lors de la tentative d'importation d'une base de données dans MySQL, un Un message d'erreur indiquant qu'il manque à une fonction l'une des déclarations suivantes dans sa déclaration et que la journalisation binaire est activée peut survenir :

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)

Résolution du problème

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

  1. Exécutez ce qui suit dans la console MySQL :
SET GLOBAL log_bin_trust_function_creators = 1;
  1. Ajoutez ce qui suit au fichier de configuration mysql.ini :
log_bin_trust_function_creators = 1;

Cela assouplit la vérification des fonctions non déterministes, qui sont des fonctions qui modifient les données.

Comprendre les déclarations déterministes

Fonctions déterministes produisent toujours le même résultat pour les mêmes paramètres d’entrée, contrairement aux fonctions non déterministes. MySQL utilise ces déclarations lors de l'optimisation de la réplication.

Types de déclarations déterministes

Plusieurs types de déclarations déterministes sont disponibles :

  • DETERMINISTIQUE : Déclare la fonction déterministe.
  • NON DÉTERMINISTE : Déclare la fonction non déterministe.
  • LECTURE DES DONNÉES SQL : Déclare que la fonction lit uniquement les données des bases de données.
  • NO SQL : Déclare que la fonction ne contient aucune instruction SQL.
  • CONTAINS SQL : Déclare que la fonction contient des instructions SQL, mais ne lit ni n'écrit de données.

Bonne pratique

Il est recommandé de spécifier correctement les déclarations déterministes pour les fonctions pour garantir une réplication et une intégrité des données optimales. En examinant attentivement la nature de la fonction et en utilisant les déclarations appropriées, vous pouvez éviter les erreurs et optimiser les performances 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