MySQL Функции: строковые, числовые, определяемые пользователем, сохраненные.

Что такое функции?

MySQL может делать гораздо больше, чем просто хранить и извлекать данные. Мы также можем выполнять манипуляции с данными прежде чем получить или сохранить его. Вот где MySQL Функции приходят. Функции — это просто фрагменты кода, которые выполняют некоторые операции и затем возвращают результат. Некоторые функции принимают параметры, а другие — нет.

Давайте кратко рассмотрим пример MySQL функция. По умолчанию, MySQL сохраняет типы данных даты в формате «ГГГГ-ММ-ДД». Предположим, мы создали приложение и наши пользователи хотят, чтобы дата возвращалась в формате «ДД-ММ-ГГГГ», мы можем использовать MySQL для этого встроена функция DATE_FORMAT. DATE_FORMAT — одна из наиболее часто используемых функций в MySQL. Мы рассмотрим это более подробно по мере развития урока.

Зачем использовать функции?

Зачем использовать функции

Основываясь на примере, приведенном во введении, люди с опытом компьютерного программирования могут подумать: «Зачем вообще беспокоиться? MySQL Функции? Того же эффекта можно добиться с помощью языка сценариев/программирования?» Это правда, что мы можем добиться этого, написав некоторые процедуры/функции в прикладной программе.

Возвращаясь к нашему примеру DATE во введении: чтобы наши пользователи могли получить данные в желаемом формате, бизнес-уровень должен будет выполнить необходимую обработку.

Это становится проблемой, когда приложению приходится интегрироваться с другими системами. Когда мы используем MySQL такие функции, как DATE_FORMAT, тогда мы можем внедрить эту функциональность в базу данных, и любое приложение, которому нужны данные, получит их в требуемом формате. Этот уменьшает повторную работу в бизнес-логике и уменьшает несогласованность данных.

Еще одна причина, почему нам следует рассмотреть возможность использования MySQL Функцией является тот факт, что он может помочь уменьшить сетевой трафик в клиент-серверных приложениях.. Бизнес-уровню потребуется только вызывать сохраненные функции без необходимости манипулирования данными. В среднем использование функций может помочь значительно улучшить общую производительность системы.

Типы функций

Встроенные функции

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

  • Строковые функции – работать со строковыми типами данных
  • Числовые функции – работать с числовыми типами данных
  • Функции даты – работать с типами данных даты
  • Агрегатные функции – работать со всеми вышеперечисленными типами данных и создавать обобщенные наборы результатов.
  • Другие функции – MySQL также поддерживает другие типы встроенных функций, но мы ограничим наш урок только вышеупомянутыми функциями.

Давайте теперь подробно рассмотрим каждую из упомянутых выше функций. Мы будем объяснять наиболее часто используемые функции, используя нашу «Myflixdb».

Строковые функции

Мы уже рассмотрели, что делают строковые функции. Мы рассмотрим практический пример их использования. В нашей таблице фильмов названия фильмов хранятся в виде комбинаций строчных и прописных букв. Предположим, мы хотим получить список запросов, который возвращает названия фильмов заглавными буквами. Для этого мы можем использовать функцию «UCASE». Он принимает строку в качестве параметра и преобразует все буквы в верхний регистр. Сценарий, показанный ниже, демонстрирует использование функции «UCASE».

SELECT `movie_id`,`title`, UCASE(`title`)  FROM `movies`;

ВОТ

  • UCASE(`title`) — это встроенная функция, которая принимает заголовок в качестве параметра и возвращает его заглавными буквами с псевдонимом `upper_case_title`.

Выполнение приведенного выше сценария в MySQL Workbench с Myflixdb дает нам следующие результаты, показанные ниже.

movie_id title UCASE('title')
16 67% Guilty 67% GUILTY
6 Angels and Demons ANGELS AND DEMONS
4 Code Name Black CODE NAME BLACK
5 Daddy's Little Girls DADDY'S LITTLE GIRLS
7 Davinci Code DAVINCI CODE
2 Forgetting Sarah Marshal FORGETTING SARAH MARSHAL
9 Honey mooners HONEY MOONERS
19 movie 3 MOVIE 3
1 Pirates of the Caribean 4 PIRATES OF THE CARIBEAN 4
18 sample movie SAMPLE MOVIE
17 The Great Dictator THE GREAT DICTATOR
3 X-Men X-MEN

MySQL поддерживает ряд строковых функций. Полный список всех встроенных строковых функций можно найти по этой ссылке. http://dev.mysql.com/doc/refman/5.0/en/string-functions.html on MySQL

Числовые функции

Как упоминалось ранее, эти функции работают с числовыми типами данных. Мы можем выполнять математические вычисления над числовыми данными в операторах SQL.

Арифметические операторы

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

Имя Описание
DIV Целочисленное деление
/ Разделение
вычитание
+ Дополнение
* Умножение
% или МОД модуль

Давайте теперь посмотрим на примеры каждого из приведенных выше операторов.

Целочисленное деление (DIV)

SELECT 23 DIV 6 ;

Выполнение приведенного выше сценария дает нам следующие результаты.

3

Оператор отдела (/)

Давайте теперь посмотрим на пример оператора деления. Мы изменим пример DIV.

SELECT 23 / 6 ;

Выполнение приведенного выше сценария дает нам следующие результаты.

3.8333

Оператор вычитания (-)

Давайте теперь посмотрим на пример оператора вычитания. Мы будем использовать те же значения, что и в двух предыдущих примерах.

SELECT 23 - 6 ;

Выполнение приведенного выше сценария дает нам 17

Оператор сложения (+)

Давайте теперь посмотрим на пример оператора сложения. Мы изменим предыдущий пример.

SELECT 23 + 6 ;

Выполнение приведенного выше сценария дает нам 29

Оператор умножения (*)

Давайте теперь посмотрим на пример оператора умножения. Мы будем использовать те же значения, что и в предыдущих примерах.

SELECT 23 * 6 AS `multiplication_result`;

Выполнение приведенного выше сценария дает нам следующие результаты.

multiplication_result
138

Оператор по модулю (-)

Оператор по модулю делит N на M и дает нам остаток. Давайте теперь посмотрим на пример оператора по модулю. Мы будем использовать те же значения, что и в предыдущих примерах.

SELECT 23 % 6 ;

OR

SELECT 23 MOD 6 ;

Выполнение приведенного выше сценария дает нам 5

Давайте теперь посмотрим на некоторые распространенные числовые функции в MySQL.

Этаж – эта функция удаляет десятичные знаки из числа и округляет его до ближайшего наименьшего числа. Сценарий, показанный ниже, демонстрирует его использование.

SELECT FLOOR(23 / 6) AS `floor_result`;

Выполнение приведенного выше сценария дает нам следующие результаты.

Этаж_результат
3

Круглые – эта функция округляет число с десятичными знаками до ближайшего целого числа. Сценарий, показанный ниже, демонстрирует его использование.

SELECT ROUND(23 / 6) AS `round_result`;

Выполнение приведенного выше сценария дает нам следующие результаты.

Round_result
4

Граница – эта функция используется для генерации случайного числа, его значение меняется каждый раз при вызове функции. Сценарий, показанный ниже, демонстрирует его использование.

SELECT RAND() AS `random_result`;

Сохраненные функции

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

CREATE FUNCTION sf_name ([parameter(s)])
   RETURNS data type
   DETERMINISTIC
   STATEMENTS

ВОТ

  • «СОЗДАТЬ ФУНКЦИЮ sf_name ([параметр(ы)])» является обязательным и сообщает MySQL сервер для создания функции с именем `sf_name' с дополнительными параметрами, указанными в скобках.
  • «Тип данных ВОЗВРАЩАЕТСЯ» является обязательным и указывает тип данных, который должна возвращать функция.
  • «ДЕТЕРМИНИСТИЧЕСКИЙ» означает, что функция будет возвращать те же значения, если ей переданы те же аргументы.
  • "ЗАЯВЛЕНИЯ" — это процедурный код, который выполняет функция.

Давайте теперь рассмотрим практический пример, реализующий встроенную функцию. Предположим, мы хотим узнать, какие взятые напрокат фильмы уже вышли из даты возврата. Мы можем создать хранимую функцию, которая принимает дату возврата в качестве параметра, а затем сравнивает ее с текущей датой в MySQL сервер. Если текущая дата меньше даты возвращения фильма, мы возвращаем «Нет», иначе мы возвращаем «Да». Сценарий, показанный ниже, помогает нам добиться этого.

DELIMITER |
CREATE FUNCTION sf_past_movie_return_date (return_date DATE)
  RETURNS VARCHAR(3)
   DETERMINISTIC
    BEGIN
     DECLARE sf_value VARCHAR(3);
        IF curdate() > return_date
            THEN SET sf_value = 'Yes';
        ELSEIF  curdate() <= return_date
            THEN SET sf_value = 'No';
        END IF;
     RETURN sf_value;
    END|

Выполнение приведенного выше сценария создало сохраненную функцию `sf_past_movie_return_date`.

Давайте теперь проверим нашу хранимую функцию.

SELECT `movie_id`,`membership_number`,`return_date`,CURDATE() ,sf_past_movie_return_date(`return_date`)  FROM `movierentals`;

Выполнение приведенного выше сценария в MySQL Workbench с myflixdb дает нам следующие результаты.

movie_id membership_number return_date CURDATE() sf_past_movie_return_date('return_date')
1 1 NULL 04-08-2012 NULL
2 1 25-06-2012 04-08-2012 yes
2 3 25-06-2012 04-08-2012 yes
2 2 25-06-2012 04-08-2012 yes
3 3 NULL 04-08-2012 NULL

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

MySQL также поддерживает пользовательские функции, которые расширяют MySQL. Пользовательские функции — это функции, которые можно создать с помощью такого языка программирования, как C, C++ и т. д., а затем добавьте их в MySQL сервер. После добавления их можно использовать так же, как и любую другую функцию.

Резюме

  • Функции позволяют расширить возможности MySQL.
  • Функции всегда возвращают значение и при необходимости могут принимать параметры.
  • Встроенные функции — это функции, поставляемые вместе с MySQLИх можно классифицировать по типам данных, с которыми они работают, то есть строки, даты и числовые встроенные функции.
  • Сохраненные функции создаются пользователем внутри MySQL сервер и может использоваться в операторах SQL.
  • Пользовательские функции создаются снаружи MySQL и может быть включен в MySQL сервера.