Sollte ich in der Regel alle meine gespeicherten Prozeduren mit dem Schlüsselwort DETERMINISTIC deklarieren, wenn sie tatsächlich deterministisch sind?
Es scheint mir, dass die Mehrheit der gespeicherten Prozeduren deterministisch sein wird. Habe ich Recht, wenn ich denke, dass die einzigen nicht deterministischen Prozeduren solche sind, die nicht deterministische Funktionen wie RAND () oder CURDATE () aufrufen?
Der Grund, den ich frage, ist, dass bei Verwendung der Datenwiederherstellungsfunktion in MySQL Workbench der folgende Fehler angezeigt wird:
ERROR 1418 (HY000) at line 1209: 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)
Ist es besser, stattdessen einfach 'log_bin_trust_function_creators = 1' zu setzen? Denken Sie daran, dass ich über 50 gespeicherte Prozeduren habe.
log_bin_trust_function_creators
Dies ist einfach ein Ass in der Lücke bei der Migration von gespeicherten Prozeduren. Die DETERMINISTIC-Eigenschaft wurde zu zwei Dingen hinzugefügt:
Die Fehlermeldung hat einfach ihren hässlichen Kopf aufgerichtet, weil die binäre Protokollierung aktiviert ist und gespeicherte Prozeduren vorhanden sind. Deaktivieren Sie entweder die binäre Protokollierung und markieren Sie die gespeicherten Prozeduren als deterministisch.
Hier ist etwas schnelles und schmutziges, das Sie mit allen gespeicherten Prozeduren tun können, ohne die Skripte bearbeiten zu müssen: Aktualisieren Sie mysql.proc und tun Sie dies:
Ich habe es in MySQL 5.5.12 für Windows versucht
Wenn Sie dies für alle gespeicherten Prozeduren tun, sollte MySQL Workbench damit aufhören, sich zu beschweren.
quelle