📖 Теория
⚡ Кратко: 📖 теория
Пользовательская функция в MySQL создаётся командой CREATE FUNCTION и возвращает одно значение.
Функция объявляет параметры, тип результата через RETURNS, тело между BEGIN и END, а результат отдаёт через RETURN.
Для MySQL в учебных примерах используется DELIMITER //, чтобы точки с запятой внутри тела не завершали весь скрипт раньше времени.
Ключевое свойство DETERMINISTIC означает, что при одинаковых входных данных функция возвращает одинаковый результат.
Минимальный пример: SELECT square_root(25); после создания функции square_root(x DOUBLE) вернёт квадратный корень.
Топ-3 ошибки: забыть DELIMITER, не указать RETURNS, использовать функцию с текущей датой как DETERMINISTIC без проверки документации.
Что такое пользовательская функция
Пользовательская функция — это функция, которую разработчик создаёт в базе данных командой CREATE FUNCTION. После создания её можно вызывать в SQL-запросах так же, как встроенные функции.
В источнике урока фокус именно на MySQL: функция принимает параметры, возвращает одно значение и хранится на сервере базы данных.
Базовый синтаксис MySQL
DELIMITER //
CREATE FUNCTION function_name(parameter1 datatype, parameter2 datatype)
RETURNS return_datatype
DETERMINISTIC
BEGIN
RETURN return_value;
END //
DELIMITER ;
DELIMITER //временно меняет разделитель команд: внутри тела функции уже есть обычные;.RETURNSсообщает тип одного возвращаемого значения.BEGIN ... ENDгруппирует тело функции.RETURNзавершает вычисление и отдаёт результат вызывающему запросу.
DETERMINISTIC и NON-DETERMINISTIC
DETERMINISTIC означает: при одинаковых аргументах функция всегда возвращает один и тот же результат. Например, square_root(25) всегда возвращает один и тот же корень.
NON-DETERMINISTIC нужен, если результат может меняться без изменения аргументов: например, при использовании текущей даты или времени.
Синтаксис функций отличается между MySQL, PostgreSQL и SQLite. В PostgreSQL указывается язык функции, а в SQLite пользовательские функции обычно регистрируются из приложения через API.
Когда функция уместна
Функция полезна, когда одно и то же вычисление нужно вызывать в разных запросах: вычислить возраст, форматировать текст, проверить число или вернуть короткое сообщение. Если логика изменяет таблицы или должна выполнять несколько SQL-команд как процесс, это уже ближе к хранимой процедуре.