Детерминированная функция в mysql

Я запутался с кажущейся простой концепцией. 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;

, не являются детерминированными (нет гарантии, что delete / update / insert не происходит между двумя вызовами функции). В то же время я видел много функций, которые делают примерно то же самое, т.е. возвращают значение на основе результата запросов и объявлены как DETERMINISTIC . Похоже, мне не хватает чего-то очень простого.

Кто-нибудь может прояснить этот вопрос?

Спасибо.

Обновление Спасибо тем, кто ответил (+1); пока похоже, что ключевое слово DETERMINISTIC широко используется не по назначению. Мне все еще трудно поверить, что так много людей делают это, поэтому я немного подожду других ответов.

29
задан a1ex07 30 October 2011 в 18:07
поделиться