Я запутался в простой концепции. Mysql определяет детерминированную функцию как функцию, которая
всегда производит тот же результат для тех же входных параметров
Итак, в моем понимании, такие функции, как
CREATE FUNCTION foo (val INT) READS SQL DATA
BEGIN
DECLARE retval INT;
SET retval = (SELECT COUNT(*) FROM table_1 WHERE field_1 = val);
RETURN retval;
END;
не являются детерминированными (нет гарантии, что удаление/обновление/вставка не происходит между двумя вызовами функции). В то же время я видел много функций, которые почти одинаковы, т.е. Возвращают значение на основе результатов запросов и объявляются как DETERMINISTIC
. Похоже, я пропускаю что-то очень простое.
Может ли кто-нибудь прояснить эту проблему?
Спасибо.
Обновление
Спасибо за тех, кто ответил (+1); пока это похоже на распространенное злоупотребление ключевыми словами DETERMINISTIC
. Мне все еще трудно поверить, что так много людей делают это, поэтому я буду немного ждать других ответов.