Basta ascoltare la domanda mi fa pensare a due aspetti:
ASPETTO 1: Le funzioni dovrebbero essere DETERMINISTICHE
In tal caso, ciò implica che una funzione dovrebbe presentare gli stessi dati di ritorno in modo coerente per un determinato set di parametri, NESSUNA QUESTIONE QUANDO SI CHIAMA LA FUNZIONE.
Ora, immagina una funzione che produce una risposta diversa a causa della raccolta di dati in diversi momenti della giornata in base a SQL statico nella funzione. In un certo senso, ciò può ancora essere considerato DETERMINISTICO se si interroga ogni volta lo stesso set di tabelle e colonne, dato lo stesso set di parametri.
E se fosse possibile modificare le tabelle sottostanti di una funzione tramite Dynamic SQL? Stai violando la definizione di una funzione DETERMINISTICA.
Notare che MySQL ha aggiunto questa opzione in /etc/my.cnf
log-bin-trust-function-creators
Sebbene ciò possa essere una semplificazione eccessiva, ciò consente alle funzioni di scrivere dati in registri binari senza applicare rigorosamente la proprietà DETERMINISTIC.
ASPETTO # 2: i trigger dovrebbero poter essere ripristinati
- Potresti immaginare un trigger con tutti gli stessi comportamenti di una funzione e quindi introdurre Dynamic SQL nel mix?
- Potresti immaginare di provare ad applicare MVCC (Multiversion Concurrecy Control) contro Dynamic SQL dopo aver applicato MVCC alla tabella di base per cui è stato progettato il trigger?
Avresti essenzialmente dati che crescono in modo quadratico (anche esponenziale) solo nel solo MVCC. Il processo di gestione del rollback di SQL con trigger che possono essere non DETERMINISTICI sarebbe a dir poco complesso.
Alla luce di questi due aspetti, sono sicuro che gli sviluppatori MySQL hanno pensato a queste cose e le hanno rapidamente respinte imponendo restrizioni.
Quindi, perché revocare la restrizione per le procedure? In poche parole, non vi è alcuna preoccupazione per le proprietà DETERMINISTICHE o il rollback.