Co jsou funkce?
MySQL dokáže mnohem víc než jen ukládat a načítat data . Můžeme také provést manipulace s daty před jejich načtením nebo uložením. To je místo, kde přicházejí funkce MySQL. Funkce jsou jednoduše části kódu, které provádějí některé operace a poté vracejí výsledek. Některé funkce přijímají parametry, zatímco jiné funkce parametry nepřijímají.
Podívejme se krátce na příklad funkce MySQL. Ve výchozím nastavení MySQL ukládá datové datové typy ve formátu „RRRR-MM-DD“. Předpokládejme, že jsme vytvořili aplikaci a naši uživatelé chtějí, aby bylo datum vráceno ve formátu „DD-MM-RRRR“, abychom toho dosáhli, můžeme použít vestavěnou funkci DATE_FORMAT vytvořenou pomocí MySQL. DATE_FORMAT je jednou z nejpoužívanějších funkcí v MySQL. Na tuto lekci se podíváme podrobněji.
Proč používat funkce?
Na příkladu uvedeném v úvodu si lidé se zkušenostmi s programováním v počítači mohou myslet: „Proč se obtěžovat s funkcemi MySQL? Stejného efektu lze dosáhnout pomocí skriptovacího / programovacího jazyka?“ Je pravda, že toho můžeme dosáhnout napsáním některých procedur / funkcí v aplikačním programu.
Vrátíme-li se v úvodu k našemu příkladu DATUM, aby naši uživatelé mohli získat data v požadovaném formátu, obchodní vrstva bude muset provést nezbytné zpracování.
To se stává problémem, když se aplikace musí integrovat s jinými systémy. Když používáme funkce MySQL, jako je DATE_FORMAT, můžeme mít tuto funkci vloženou do databáze a každá aplikace, která data potřebuje, ji získá v požadovaném formátu. To snižuje přepracování obchodní logiky a snižuje nekonzistenci dat.
Dalším důvodem, proč bychom měli zvážit použití funkcí MySQL, je skutečnost, že může pomoci snížit síťový provoz v aplikacích klient / server . Business Layer bude muset pouze volat uložené funkce bez nutnosti manipulace s daty. V průměru může použití funkcí pomoci výrazně zlepšit celkový výkon systému.
Druhy funkcí
Integrované funkce
MySQL je dodáván s řadou vestavěných funkcí. Integrované funkce jsou jednoduše funkce, které jsou již implementovány na serveru MySQL. Tyto funkce nám umožňují provádět různé typy manipulace s daty. Integrované funkce lze v zásadě rozdělit do následujících nejpoužívanějších kategorií.
- Funkce řetězce - fungují na datových typech řetězců
- Numerické funkce - fungují na numerických datových typech
- Funkce data - fungují na datových typech data
- Agregační funkce - fungují na všech výše uvedených datových typech a vytvářejí souhrnné sady výsledků.
- Další funkce - MySQL podporuje také jiné typy vestavěných funkcí, ale lekci omezíme pouze na výše jmenované funkce.
Podívejme se nyní na každou z výše uvedených funkcí podrobně. Vysvětlíme nejpoužívanější funkce pomocí našeho „Myflixdb“.
Řetězcové funkce
Už jsme se podívali na to, co funkce řetězců dělají. Podíváme se na praktický příklad, který je používá. V naší tabulce filmů jsou názvy filmů ukládány pomocí kombinací malých a velkých písmen. Předpokládejme, že chceme získat seznam dotazů, který vrátí názvy filmů velkými písmeny. K tomu můžeme použít funkci „UCASE“. Jako parametr převezme řetězec a převede všechna písmena na velká písmena. Skript zobrazený níže ukazuje použití funkce „UCASE“.
SELECT `movie_id`,`title`, UCASE(`title`) FROM `movies`;
TADY
- UCASE (`title`) je vestavěná funkce, která bere nadpis jako parametr a vrací jej velkými písmeny s aliasovým názvem` upper_case_title`.
Provedení výše uvedeného skriptu v pracovní ploše MySQL proti Myflixdb nám dává následující výsledky uvedené níže.
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 podporuje řadu řetězcových funkcí. Úplný seznam všech vestavěných funkcí řetězce naleznete na tomto odkazu http://dev.mysql.com/doc/refman/5.0/en/string-functions.html na webu MySQL.
Numerické funkce
Jak již bylo zmíněno dříve, tyto funkce fungují na numerických datových typech. Můžeme provádět matematické výpočty na číselných datech v příkazech SQL.
Aritematické operátory
MySQL podporuje následující aritmatické operátory, které lze použít k provádění výpočtů v příkazech SQL.
název |
Popis |
---|---|
DIV |
Celé dělení |
/ |
Divize |
- |
Odčítání |
+ |
Přidání |
* |
Násobení |
% nebo MOD |
Modul |
Pojďme se nyní podívat na příklady každého z výše uvedených operátorů
Integer Division (DIV)
SELECT 23 DIV 6 ;
Provedení výše uvedeného skriptu nám poskytne následující výsledky.
3
Operátor divize (/)
Podívejme se nyní na příklad operátora dělení. Příklad DIV upravíme.
SELECT 23 / 6 ;
Provedení výše uvedeného skriptu nám poskytne následující výsledky.
3,8333
Operátor odčítání (-)
Podívejme se nyní na příklad operátoru odčítání. Použijeme stejné hodnoty jako v předchozích dvou příkladech
SELECT 23 - 6 ;
Provedení výše uvedeného skriptu nám dává 17
Operátor přidání (+)
Podívejme se nyní na příklad operátoru přidání. Upravíme předchozí příklad.
SELECT 23 + 6 ;
Provedení výše uvedeného skriptu nám dává 29
Operátor násobení (*)
Podívejme se nyní na příklad operátoru násobení. Použijeme stejné hodnoty jako v předchozích příkladech.
SELECT 23 * 6 AS `multiplication_result`;
Provedení výše uvedeného skriptu nám poskytne následující výsledky.
multiplication_result |
138 |
Modulární operátor (-)
Operátor modulo dělí N na M a dává nám zbytek. Podívejme se nyní na příklad operátora modulo. Použijeme stejné hodnoty jako v předchozích příkladech.
SELECT 23 % 6 ;
NEBO
SELECT 23 MOD 6 ;
Provedení výše uvedeného skriptu nám dává 5
Pojďme se nyní podívat na některé běžné numerické funkce v MySQL.
Podlaží - tato funkce odstraní desetinná místa z čísla a zaokrouhlí jej na nejbližší nejnižší číslo. Níže uvedený skript demonstruje jeho použití.
SELECT FLOOR(23 / 6) AS `floor_result`;
Provedení výše uvedeného skriptu nám poskytne následující výsledky.
Floor_result |
3 |
Zaokrouhlit - tato funkce zaokrouhlí číslo s desetinnými místy na nejbližší celé číslo. Níže uvedený skript demonstruje jeho použití.
SELECT ROUND(23 / 6) AS `round_result`;
Provedení výše uvedeného skriptu nám poskytne následující výsledky.
Round_result |
4 |
Rand - tato funkce se používá ke generování náhodného čísla, jeho hodnota se mění pokaždé, když je funkce vyvolána. Níže uvedený skript demonstruje jeho použití.
SELECT RAND() AS `random_result`;
Uložené funkce
Uložené funkce jsou stejně jako vestavěné funkce, kromě toho, že musíte definovat uloženou funkci sami. Jakmile je uložená funkce vytvořena, může být použita v příkazech SQL stejně jako kterákoli jiná funkce. Základní syntaxe pro vytvoření uložené funkce je uvedena níže
CREATE FUNCTION sf_name ([parameter(s)])RETURNS data typeDETERMINISTICSTATEMENTS
TADY
- „CREATE FUNCTION sf_name ([parameter (s)])“ je povinné a říká serveru MySQL, aby vytvořil funkci s názvem „sf_name“ s volitelnými parametry definovanými v závorkách.
- „RETURNS datový typ“ je povinný a určuje datový typ, který má funkce vracet.
- „DETERMINISTIC“ znamená, že funkce vrátí stejné hodnoty, pokud jsou jí dodány stejné argumenty.
- „STATEMENTS“ je procedurální kód, který funkce provádí.
Podívejme se nyní na praktický příklad, který implementuje vestavěnou funkci. Předpokládejme, že chceme vědět, které vypůjčené filmy jsou po datu návratu. Můžeme vytvořit uloženou funkci, která jako parametr přijímá datum návratu a poté jej porovná s aktuálním datem na serveru MySQL. Pokud je aktuální datum menší než datum vráceného filmu, vrátíme „Ne“, jinak vrátíme „Ano“. Skript zobrazený níže nám k tomu pomáhá.
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|
Po provedení výše uvedeného skriptu byla vytvořena uložená funkce `sf_past_movie_return_date`.
Pojďme nyní otestovat naši uloženou funkci.
SELECT `movie_id`,`membership_number`,`return_date`,CURDATE() ,sf_past_movie_return_date(`return_date`) FROM `movierentals`;
Provedení výše uvedeného skriptu v pracovní ploše MySQL proti myflixdb nám dává následující výsledky.
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 |
Uživatelem definované funkce
MySQL také podporuje uživatelem definované funkce, které rozšiřují MySQL. Uživatelem definované funkce jsou funkce, které můžete vytvořit pomocí programovacího jazyka, jako je C, C ++ atd., A poté je přidat na server MySQL. Po přidání je lze použít jako jakoukoli jinou funkci.
souhrn
- Funkce nám umožňují rozšířit možnosti MySQL.
- Funkce vždy vrátí hodnotu a mohou volitelně přijímat parametry.
- Integrované funkce jsou funkce dodávané s MySQL. Lze je rozdělit do kategorií podle datových typů, s nimiž pracují, tj. Řetězců, data a číselných vestavěných funkcí.
- Uložené funkce vytváří uživatel na serveru MySQL a lze je použít v příkazech SQL.
- Uživatelem definované funkce se vytvářejí mimo MySQL a lze je začlenit do serveru MySQL.