О web-разработке
и даже немного больше...

Пользовательские функции

В MySQL пользовательские функции (UserDefined Functions, UDF) — это подпрограммы, которые можно создавать для выполнения определенного действия и возврата значения. Они бывают двух основных типов: хранимые функции, написанные на SQL и хранящиеся в базе данных, и динамические UDF, реализуемые как внешние библиотеки и подключаемые через команду CREATE FUNCTION. Кроме этого, в MySQL существуют агрегатные, аналитические и скалярные функции.

Типы пользовательских функций

Хранимые функции (Stored Functions)

Это фрагменты кода на языке SQL, которые хранятся непосредственно в базе данных.

Они создаются с помощью команды CREATE FUNCTION и доступны после создания на сервере MySQL.

Используются для инкапсуляции логики и повторного использования кода, например, для вычисления сложных значений.

Динамические UDF

Это функции, реализованные на внешнем языке программирования (например, C/C++).

Они компилируются в виде библиотек и подключаются к серверу MySQL с помощью команд CREATE FUNCTION и DROP FUNCTION.

Этот механизм позволяет расширять возможности MySQL функциями, которые недоступны в стандартном SQL.

Как работают функции

Скалярные функции выполняют вычисления и возвращают одиночное значение (например, LOWER() для приведения к нижнему регистру).

Агрегатные функции обрабатывают набор значений и возвращают одно сводное значение (например, SUM(), AVG(), COUNT()).

MySQL также поддерживает аналитические функции, которые выполняют вычисления на наборе строк, связанных с текущей строкой, и ранжирующие функции.

Пример использования (хранимая функция)

# Создание хранимой функции
DELIMITER $$
CREATE FUNCTION GetFullName(firstName VARCHAR(50), lastName VARCHAR(50))
RETURNS VARCHAR(101)
DETERMINISTIC
BEGIN
    RETURN CONCAT(firstName, ' ', lastName);
END $$
DELIMITER ;

# Использование функции
SELECT GetFullName('Руслан', 'Сарматов');

Этот пример создает функцию GetFullName, которая объединяет имя и фамилию в полное имя, и демонстрирует ее использование.
Пример 2. Напишем функцию в процедурном стиле, чтобы показать, что так тоже можно.

CREATE FUNCTION shop_db.get_premium_percentage()

# DETERMINISTIC, NO SQL, or READS SQL DATA – задаем тип возвращаемого результата функцией
RETURNS float READS SQL DATA

BEGIN
	DECLARE premium_user_count INT;
	DECLARE total_users_count INT;
	DECLARE _result FLOAT;

	SET premium_users_count = (
	SELECT count(*)
FROM users_settings
WHERE is_premium_account = TRUE
);

SET total_users_count = (
	SELECT count(*)
FROM users_settings
);

	SET _result = premium_users_count / total_users_count;
	RETURN _result;
END
Опубликован: 28.05.2026 г.

См. также:

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *