
Хранимые процедуры и функции
В SQL помимо обычных запросов существуют более мощные инструменты — хранимые процедуры и хранимые функции. Эти объекты позволяют создавать готовые блоки кода, которые можно многократно использовать 🔄.
Хранимые процедуры и функции — это заранее написанные и сохранённые в базе данных SQL-скрипты, которые можно вызывать по имени.
Представьте, что у вас есть сложный запрос для расчёта статистики продаж, который вы используете каждый день. Вместо того чтобы каждый раз переписывать его, можно создать процедуру или функцию и просто вызывать её!
Зачем они нужны?
Хранимые процедуры и функции решают несколько важных задач:
- 🚀 Повторное использование кода — написали один раз, используете везде. Никаких копий одного и того же кода в разных местах.
- ⚡ Производительность — код выполняется прямо на сервере базы данных, что часто быстрее обычных запросов.
- 🔒 Безопасность — можно предоставить доступ к процедуре, не давая прямого доступа к таблицам.
- 🛡️ Централизованная логика — вся бизнес-логика находится в одном месте, в базе данных.
Основные различия
Хотя процедуры и функции похожи, между ними есть важные различия:
Когда использовать процедуры?
Хранимые процедуры лучше всего подходят когда нужно:
- Выполнить последовательность операций (например, создать заказ, списать товар со склада, отправить уведомление)
- Изменить данные в нескольких таблицах одновременно
- Реализовать сложную бизнес-логику
- Вернуть несколько результирующих наборов
Пример использования процедуры
Допустим, нам нужно создать процедуру для оформления заказа:
MySQL 8.1-- Пример вызова процедуры (концептуальный) CALL create_order(customer_id = 123, product_id = 456, quantity = 2);
Такая процедура может:
- Проверить наличие товара на складе
- Создать запись в таблице заказов
- Обновить остатки товара
- Добавить запись в историю операций
Когда использовать функции?
Хранимые функции идеальны когда нужно:
- Выполнить вычисления и вернуть результат
- Создать переиспользуемую формулу
- Преобразовать данные определённым образом
- Использовать результат в других SQL-запросах
Пример использования функции
Создадим функцию для расчёта скидки:
MySQL 8.1-- Пример использования функции в запросе SELECT product_name, price, calculate_discount(price, customer_type) AS discount_amount FROM Products;
Такая функция принимает цену и тип клиента, а возвращает размер скидки, которую можно использовать в любых запросах.
Простое правило выбора
Если сомневаетесь, что выбрать, используйте это простое правило:
- Нужно получить одно значение для использования в запросе? → Функция
- Нужно выполнить набор действий или изменить данные? → Процедура
Закрепим знания
Теперь, когда вы знаете основные различия между процедурами и функциями, попробуйте классифицировать задачи в интерактивной игре:
Экран слишком узкий
Для игры требуется минимальная ширина экрана 700px. Пожалуйста, увеличьте окно браузера или поверните устройство.
Что дальше?
Это была вводная статья, чтобы понять общую концепцию. В следующих материалах мы детально разберём как создавать и работать с хранимыми процедурами и функциями.