Wenn ich nur die Frage höre, fallen mir zwei Aspekte ein:
ASPEKT 1: Funktionen sollten DETERMINISTISCH sein
Wenn dies der Fall ist, bedeutet dies, dass eine Funktion dieselben Rückgabedaten für einen bestimmten Satz von Parametern konsistent darstellen sollte, unabhängig davon, wann Sie die Funktion aufrufen.
Stellen Sie sich nun eine Funktion vor, die aufgrund der Erfassung von Daten zu unterschiedlichen Tageszeiten basierend auf statischem SQL in der Funktion eine andere Antwort liefert. In gewissem Sinne kann dies immer noch als DETERMINISTISCH betrachtet werden, wenn Sie bei gleichen Parametern jedes Mal denselben Satz von Tabellen und Spalten abfragen.
Was wäre, wenn Sie die zugrunde liegenden Tabellen einer Funktion über Dynamic SQL ändern könnten? Sie verletzen die Definition einer DETERMINISTIC-Funktion.
Beachten Sie, dass MySQL diese Option in /etc/my.cnf hinzugefügt hat
log-bin-trust-function-creators
Obwohl dies eine zu starke Vereinfachung sein mag, können Funktionen Daten in Binärprotokolle schreiben, ohne die DETERMINISTIC-Eigenschaft strikt zu erzwingen.
ASPECT # 2: Trigger sollten rückgängig gemacht werden können
- Können Sie sich einen Trigger vorstellen, der die gleichen Verhaltensweisen wie eine Funktion aufweist und dann Dynamic SQL in den Mix einführt?
- Können Sie sich vorstellen, MVCC (Multiversion Concurrecy Control) auf Dynamic SQL anzuwenden, nachdem MVCC auf die Basistabelle angewendet wurde, für die der Trigger bestimmt war?
Sie würden im Wesentlichen Daten haben, die nur in MVCC quadratisch (sogar exponentiell) wachsen. Der Prozess der Verwaltung des Rollbacks von SQL mit Triggern, die nicht DETERMINISTISCH sein können, wäre, gelinde gesagt, gottlos komplex.
In Anbetracht dieser beiden Aspekte bin ich sicher, dass MySQL-Entwickler über diese Dinge nachgedacht und sie schnell durch Auferlegung von Einschränkungen verworfen haben.
Warum also die Beschränkung für Verfahren aufheben? Einfach ausgedrückt, gibt es keine Bedenken hinsichtlich der DETERMINISTISCHEN Eigenschaften oder des Rollbacks.