Я запутался с кажущейся простой концепцией. 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
широко используется не по назначению. Мне все еще трудно поверить, что так много людей делают это, поэтому я немного подожду других ответов.