Щойно почувши це питання, я змушує задуматися про два аспекти:
АСПЕКТ №1: Функції повинні бути ДЕТЕРМІНІСТИЧНІ
Якщо це так, це означає, що функція повинна послідовно представляти однакові дані повернення для заданого набору параметрів, НЕ МАТЕРІАЛИ, КОЛИ ВИ ВЗАЄМО ФУНКЦІЮ.
Тепер уявіть собі функцію, яка виробляє іншу відповідь через збирання даних у різний час доби на основі статичного SQL у функції. У певному сенсі це все ще можна вважати ДЕТЕРМІНІСТИЧНІМ, якщо ви кожен раз запитуєте один і той же набір таблиць і стовпців із заданим набором параметрів.
Що робити, якщо ви могли змінити основні таблиці функції за допомогою Dynamic SQL? Ви порушуєте визначення ДЕТЕРМІНІСТИЧНОЇ функції.
Зауважте, що MySQL додав цю опцію в /etc/my.cnf
log-bin-trust-function-creators
Хоча це може бути надмірним спрощенням, це дозволяє дозволити функціям записувати дані у бінарні журнали, не суворо виконуючи властивість DETERMINISTIC.
АСПЕКТ №2: Тригери повинні бути спроможні повернути назад
- Чи можете ви уявити собі тригер із такою ж поведінкою як функцію, а потім ввести Dynamic SQL у суміш?
- Чи можете ви уявити собі спробу застосувати MVCC (Multiversion Concurrecy Control) проти Dynamic SQL після застосування MVCC до базової таблиці, для якого був призначений тригер?
По суті, у вас є дані, які ростуть квадратично (навіть експоненціально) лише в MVCC. Процес управління відкатом SQL за допомогою тригерів, які можуть бути недетермінантними, був би нечесним чином складним.
Зважаючи на ці два аспекти, я впевнений, що розробники MySQL подумали про ці речі та швидко відхилили їх, встановивши обмеження.
Отже, навіщо скасовувати обмеження на процедури? Простіше кажучи, жодних проблем щодо ДЕТЕРМІНІСТИЧНИХ властивостей чи відкатів немає.