Heim > Datenbank > MySQL-Tutorial > Hauptteil

Warum erhalte ich in MySQL den Fehler „DETERMINISTISCH, KEIN SQL oder LEST SQL-DATEN'?

Barbara Streisand
Freigeben: 2024-10-31 16:16:02
Original
781 Leute haben es durchsucht

Why Do I Get the

Den Fehler verstehen: Deklarationsanforderung „DETERMINISTISCH, KEIN SQL oder LEST SQL-DATEN“

Beim Importieren einer Datenbank in MySQL ist dies möglich um auf den folgenden Fehler zu stoßen:

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)
Nach dem Login kopieren

Dieser Fehler weist darauf hin, dass einer definierten Funktion oder gespeicherten Prozedur eine der folgenden Deklarationen in ihrer Definition fehlt:

  • DETERMINISTISCH
  • KEIN SQL
  • LESET SQL-DATEN

Wenn die Binärprotokollierung in MySQL aktiviert ist, sind diese Deklarationen erforderlich, um Datenintegrität und Replikationskonsistenz sicherzustellen.

Fehlerbehebungen für den Fehler

Um dieses Problem zu beheben, können Sie eine von zwei Methoden verwenden:

  1. Aktivieren Sie die Variable log_bin_trust_function_creators:

    • Führen Sie in der MySQL-Konsole den folgenden Befehl aus:

      SET GLOBAL log_bin_trust_function_creators = 1;
      Nach dem Login kopieren
    • Alternativ fügen Sie Folgendes zu Ihrer MySQL-Konfigurationsdatei hinzu (z. B. mysql .ini):

      log_bin_trust_function_creators = 1;
      Nach dem Login kopieren

    Durch die Aktivierung dieser Einstellung können Funktionen ohne explizite Deklarationen während der binären Protokollierung ausgeführt werden.

  2. Hinzufügen die entsprechende Deklaration für die Funktion oder Prozedur:

    • Verwenden Sie für Funktionen, die immer die gleiche Ausgabe für die gleichen Eingabeparameter erzeugen, die DETERMINISTIC-Deklaration. Zum Beispiel:

      CREATE FUNCTION my_function() DETERMINISTIC
      BODY
       -- Your function logic
      END
      Nach dem Login kopieren
    • Für Funktionen, die keine SQL-Anweisungen enthalten, verwenden Sie die NO SQL-Deklaration.

      CREATE FUNCTION my_function() NO SQL
      BODY
       -- Your function logic
      END
      Nach dem Login kopieren
    • Für Funktionen, die nur Daten aus der Datenbank lesen, verwenden die READS SQL DATA-Deklaration.

      CREATE FUNCTION my_function() READS SQL DATA
      BODY
       -- Your function logic
      END
      Nach dem Login kopieren

Deterministische Funktionsdeklarationen verstehen

Nicht deterministische Funktionen können Daten ändern oder unvorhersehbare Eingaben verwenden, was zu unterschiedlichen Ergebnissen für dieselben Eingabeparameter führt. Daher ist es wichtig, das Funktionsverhalten genau zu deklarieren, um die Leistung zu optimieren und die Datenintegrität sicherzustellen.

Die MySQL-Dokumentation bietet eine umfassende Anleitung zu den verschiedenen Deklarationsoptionen für Funktionen und gespeicherte Prozeduren, sodass Sie für jede davon fundierte Entscheidungen treffen können Funktion. Falscherklärungen können sich auf Ausführungspläne auswirken und die Leistung beeinträchtigen.

Das obige ist der detaillierte Inhalt vonWarum erhalte ich in MySQL den Fehler „DETERMINISTISCH, KEIN SQL oder LEST SQL-DATEN'?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!