← К оглавлению занятия

📖 Теория

📁 Блок: SQL / MySQL / Пользовательские функции ⏱️ Время изучения: ~90 мин 🎯 Сложность: Продвинутая

⚡ Кратко: 📖 теория

Пользовательская функция в 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-команд как процесс, это уже ближе к хранимой процедуре.