Какво представляват функциите?
MySQL може да направи много повече от просто съхранение и извличане на данни . Също така можем да извършваме манипулации с данните, преди да ги извлечем или запазим. Тук влизат MySQL функциите. Функциите са просто парчета код, които изпълняват някои операции и след това връщат резултат. Някои функции приемат параметри, докато други функции не приемат параметри.
Нека разгледаме накратко пример за MySQL функция. По подразбиране MySQL запазва типове данни с дата във формат „ГГГГ-ММ-ДД“. Да предположим, че сме изградили приложение и нашите потребители искат датата да бъде върната във формат "DD-MM-YYYY", можем да използваме MySQL, вградена функция DATE_FORMAT, за да постигнем това. DATE_FORMAT е една от най-използваните функции в MySQL. Ще го разгледаме по-подробно, докато разгръщаме урока.
Защо да използвам функции?
Въз основа на примера, даден във въведението, хората с опит в компютърното програмиране може би си мислят "Защо да притеснявам MySQL функциите? Същият ефект може да се постигне и с език за скриптове / програмиране?" Вярно е, че можем да постигнем това, като напишем някои процедури / функции в приложната програма.
Връщайки се към нашия пример за DATE във въведението, за да могат нашите потребители да получат данните в желания формат, бизнес слоят ще трябва да извърши необходимата обработка.
Това се превръща в проблем, когато приложението трябва да се интегрира с други системи. Когато използваме MySQL функции като DATE_FORMAT, тогава тази функция може да бъде вградена в базата данни и всяко приложение, което се нуждае от данните, я получава в необходимия формат. Това намалява повторната работа в бизнес логиката и намалява несъответствията в данните.
Друга причина, поради която трябва да обмислим използването на MySQL функции, е фактът, че това може да помогне за намаляване на мрежовия трафик в клиентски / сървърни приложения . Business Layer ще трябва само да осъществи извикване на съхранените функции, без да е необходимо да манипулира данните. Средно използването на функции може да помогне значително да подобри цялостната производителност на системата.
Видове функции
Вградени функции
MySQL се доставя в комплект с редица вградени функции. Вградените функции са просто функции, които вече са внедрени в MySQL сървъра. Тези функции ни позволяват да извършваме различни видове манипулации с данните. Вградените функции могат основно да бъдат категоризирани в следните най-използвани категории.
- Функции за низове - работят с типове данни за низове
- Числови функции - оперират с числови типове данни
- Функции за дата - работят с типове данни за дата
- Обобщени функции - работят върху всички горепосочени типове данни и създават обобщени набори от резултати.
- Други функции - MySQL поддържа и други видове вградени функции, но ние ще ограничим урока си само до горепосочените функции.
Нека сега разгледаме подробно всяка от функциите, споменати по-горе. Ще обясним най-използваните функции, използвайки нашия "Myflixdb".
Струнни функции
Вече разгледахме какво правят низовите функции. Ще разгледаме практически пример, който ги използва. В нашата таблица с филми заглавията на филмите се съхраняват, като се използват комбинации от малки и главни букви. Да предположим, че искаме да получим списък със заявки, който връща заглавията на филмите с главни букви. За това можем да използваме функцията "UCASE". Той взема низ като параметър и преобразува всички букви в главни букви. Показаният по-долу скрипт демонстрира използването на функцията "UCASE".
SELECT `movie_id`,`title`, UCASE(`title`) FROM `movies`;
ТУК
- UCASE ("заглавие") е вградената функция, която приема заглавието като параметър и го връща с главни букви с псевдоним име "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 на уебсайта на MySQL.
Числови функции
Както бе споменато по-рано, тези функции работят с числови типове данни. Можем да извършваме математически изчисления на числови данни в SQL изразите.
Аритематични оператори
MySQL поддържа следните аритматични оператори, които могат да се използват за извършване на изчисления в SQL изразите.
Име |
Описание |
---|---|
DIV |
Целочислено разделение |
/ |
Дивизия |
- |
Изваждане |
+ |
Събиране |
* |
Умножение |
% или MOD |
Модул |
Нека сега разгледаме примери за всеки от горните оператори
Целочислено разделение (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`;
Изпълнението на горния скрипт ни дава следните резултати.
умножение_резултат |
138 |
Оператор по модул (-)
Операторът по модул разделя N на M и ни дава остатъка. Нека сега разгледаме примера на оператора по модул. Ще използваме същите стойности като в предишните примери.
SELECT 23 % 6 ;
ИЛИ
SELECT 23 MOD 6 ;
Изпълнението на горния скрипт ни дава 5
Нека сега разгледаме някои от често срещаните цифрови функции в MySQL.
Floor - тази функция премахва десетични места от число и го закръглява до най-близкото най-малко число. Показаният по-долу скрипт демонстрира използването му.
SELECT FLOOR(23 / 6) AS `floor_result`;
Изпълнението на горния скрипт ни дава следните резултати.
Резултат от етаж |
3 |
Round - тази функция закръглява число с десетични знаци до най-близкото цяло число. Показаният по-долу скрипт демонстрира използването му.
SELECT ROUND(23 / 6) AS `round_result`;
Изпълнението на горния скрипт ни дава следните резултати.
Round_result |
4 |
Rand - тази функция се използва за генериране на произволно число, стойността й се променя всеки път, когато функцията бъде извикана. Показаният по-долу скрипт демонстрира използването му.
SELECT RAND() AS `random_result`;
Съхранени функции
Съхранените функции са точно като вградените функции, с изключение на това, че трябва да определите съхранената функция сами. След като е създадена съхранена функция, тя може да се използва в SQL изрази, точно както всяка друга функция. Основният синтаксис за създаване на съхранена функция е показан по-долу
CREATE FUNCTION sf_name ([parameter(s)])RETURNS data typeDETERMINISTICSTATEMENTS
ТУК
- „СЪЗДАВАНЕ НА ФУНКЦИЯ sf_name ([параметър (и)])“ е задължително и казва на MySQL сървъра да създаде функция с име „sf_name“ с незадължителни параметри, дефинирани в скобите.
- „ВРЪЩАНЕ тип данни“ е задължително и указва типа данни, който функцията трябва да върне.
- „DETERMINISTIC“ означава, че функцията ще върне същите стойности, ако й бъдат предоставени едни и същи аргументи.
- "СТАНОВИЩА" е процедурният код, който функцията изпълнява.
Нека сега разгледаме практически пример, който реализира вградена функция. Да предположим, че искаме да знаем кои наети филми са след датата на връщане. Можем да създадем съхранена функция, която приема датата на връщане като параметър и след това я сравнява с текущата дата в MySQL сървъра. Ако текущата дата е по-малка от датата на връщане на филма, ние връщаме "Не", в противен случай връщаме "Да". Показаният по-долу скрипт ни помага да постигнем това.
DELIMITER |CREATE FUNCTION sf_past_movie_return_date (return_date DATE)RETURNS VARCHAR(3)DETERMINISTICBEGINDECLARE sf_value VARCHAR(3);IF curdate() > return_dateTHEN SET sf_value = 'Yes';ELSEIF curdate() <= return_dateTHEN 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 сървър.