MySQL Funkce: Řetězcové, Číselné, Uživatelsky definované, Uložené

Co jsou funkce?

MySQL umí mnohem víc než jen ukládat a načítat data. Můžeme také provádět manipulace s daty před jeho načtením nebo uložením. To je tam kde MySQL Přicházejí funkce. Funkce jsou jednoduše kousky kódu, které provádějí nějaké operace a pak 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 MySQL funkce. Ve výchozím stavu, MySQL ukládá datové typy dat ve formátu „RRRR-MM-DD“. Předpokládejme, že jsme vytvořili aplikaci a naši uživatelé chtějí, aby se datum vrátilo ve formátu „DD-MM-RRRR“, můžeme použít MySQL vestavěná funkce DATE_FORMAT k dosažení tohoto cíle. DATE_FORMAT je jednou z nejpoužívanějších funkcí v MySQL. Podíváme se na to podrobněji, až budeme lekci rozvíjet.

Proč používat funkce?

Proč používat funkce

Na základě příkladu uvedeného v úvodu si lidé se zkušenostmi s počítačovým programováním mohou myslet: „Proč se obtěžovat MySQL Funkce? 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.

Vraťme se k našemu příkladu DATE v úvodu, aby naši uživatelé získali data v požadovaném formátu, bude muset obchodní vrstva 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 MySQL funkce, jako je DATE_FORMAT, pak můžeme mít tuto funkcionalitu začleněnou do databáze a jakákoli aplikace, která potřebuje data, je dostane v požadovaném formátu. Tento snižuje přepracování v obchodní logice a snižuje nekonzistenci dat.

Další důvod, proč bychom měli zvážit použití MySQL funkcí je skutečnost, že může pomoci snížit síťový provoz v aplikacích klient/server. Business Layer bude potřebovat pouze volat k uloženým funkcím bez nutnosti manipulovat s daty. V průměru může použití funkcí výrazně zlepšit celkový výkon systému.

Typy funkcí

Integrované funkce

MySQL je dodáván s řadou vestavěných funkcí. Vestavěné funkce jsou jednoduše funkce, které jsou již implementovány v systému MySQL server. Tyto funkce nám umožňují provádět různé typy manipulací s daty. Vestavěné funkce lze v zásadě roztřídit do následujících nejpoužívanějších kategorií.

  • Funkce řetězců – pracovat s datovými typy řetězců
  • Číselné funkce – pracovat s číselnými datovými typy
  • Funkce data – pracovat s datovými typy dat
  • Agregační funkce – pracovat se všemi výše uvedenými datovými typy a vytvářet souhrnné sady výsledků.
  • Ostatní funkce - MySQL podporuje také další typy vestavěných funkcí, ale naši lekci omezíme pouze na výše uvedené funkce.

Podívejme se nyní podrobně na každou z výše zmíněných funkcí. Nejpoužívanější funkce vysvětlíme pomocí našeho „Myflixdb“.

Řetězcové funkce

Již jsme se podívali na to, co funkce řetězce dělají. Podíváme se na praktický příklad, který je využívá. V naší tabulce filmů jsou názvy filmů uloženy pomocí kombinací malých a velkých písmen. Předpokládejme, že chceme získat seznam dotazů, který vrací názvy filmů velkými písmeny. K tomu můžeme použít funkci „UCASE“. Vezme řetězec jako parametr a převede všechna písmena na velká písmena. Níže uvedený skript ukazuje použití funkce „UCASE“.

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

ZDE

  • UCASE(`title`) je vestavěná funkce, která přebírá název jako parametr a vrací jej velkými písmeny s názvem aliasu `upper_case_title`.

Spuštění výše uvedeného skriptu v MySQL workbench 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 řetězcových funkcí naleznete na tomto odkazu http://dev.mysql.com/doc/refman/5.0/en/string-functions.html on MySQL webová stránka.

Číselné funkce

Jak již bylo zmíněno, tyto funkce pracují s číselnými datovými typy. Můžeme provádět matematické výpočty na číselných datech v příkazech SQL.

Aritmetické 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 Description
DIV Celé dělení
/ Divize
- Odčítání
+ Přidání
* Násobení
% nebo MOD modul

Podívejme se nyní na příklady každého z výše uvedených operátorů

Celočíselné dělení (DIV)

SELECT 23 DIV 6 ;

Spuštění 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 divize. Upravíme příklad DIV.

SELECT 23 / 6 ;

Spuštění 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 ;

Spuštěním výše uvedeného skriptu získáme 17

Operátor přidání (+)

Podívejme se nyní na příklad operátoru sčítání. Upravíme předchozí příklad.

SELECT 23 + 6 ;

Spuštěním výše uvedeného skriptu získáme 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`;

Spuštění výše uvedeného skriptu nám poskytne následující výsledky.

výsledek_násobení
138

Modulo operátor (-)

Operátor modulo vydělí N M a dá 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 ;

OR

SELECT 23 MOD 6 ;

Spuštěním výše uvedeného skriptu získáme 5

Podívejme se nyní na některé běžné numerické funkce v MySQL.

Na podlaze – tato funkce odstraní z čísla desetinná místa a zaokrouhlí jej na nejbližší nejnižší číslo. Skript zobrazený níže ukazuje jeho použití.

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

Spuštění výše uvedeného skriptu nám poskytne následující výsledky.

Podlaha_výsledek
3

Kolo – tato funkce zaokrouhlí číslo s desetinnými místy na nejbližší celé číslo. Skript zobrazený níže ukazuje jeho použití.

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

Spuštění výše uvedeného skriptu nám poskytne následující výsledky.

Kulatý_výsledek
4

Rand – tato funkce slouží ke generování náhodného čísla, jeho hodnota se mění při každém volání funkce. Skript zobrazený níže ukazuje jeho použití.

SELECT RAND() AS `random_result`;

Uložené funkce

Uložené funkce jsou stejné jako vestavěné funkce s tím rozdílem, že uloženou funkci musíte definovat sami. Jakmile je uložená funkce vytvořena, lze ji použít v příkazech SQL stejně jako jakoukoli jinou funkci. Základní syntaxe pro vytvoření uložené funkce je uvedena níže

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

ZDE

  • “VYTVOŘIT FUNKCI sf_name ([parametr(y)]) “ je povinný a vypovídá MySQL server k vytvoření funkce s názvem `sf_name' s volitelnými parametry definovanými v závorkách.
  • „VRACÍ typ dat“ je povinný a určuje datový typ, který má funkce vrátit.
  • "DETERMINISTICKÝ" znamená, že funkce vrátí stejné hodnoty, pokud jsou jí dodány stejné argumenty.
  • "PROHLÁŠENÍ" je procedurální kód, který funkce vykonává.

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á akceptuje datum návratu jako parametr a poté jej porovná s aktuálním datem v MySQL server. Pokud je aktuální datum menší než datum návratu filmu, vrátíme „Ne“, jinak vrátíme „Ano“. Níže uvedený skript nám k tomu pomáhá.

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|

Spuštěním 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`;

Spuštění výše uvedeného skriptu v MySQL workbench 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živatelsky definované funkce

MySQL také podporuje uživatelem definované funkce, které se rozšiřují MySQL. Uživatelsky definované funkce jsou funkce, které můžete vytvořit pomocí programovacího jazyka, jako je např C, C++ atd. a poté je přidejte do MySQL server. Po přidání je lze používat stejně jako jakoukoli jinou funkci.

Shrnutí

  • Funkce nám umožňují vylepšit možnosti MySQL.
  • Funkce vždy vracejí hodnotu a mohou volitelně přijímat parametry.
  • Vestavěné funkce jsou funkce, které jsou dodávány s MySQL. Mohou být kategorizovány podle datových typů, se kterými pracují, tj. vestavěných řetězců, data a číselných funkcí.
  • Uložené funkce vytváří uživatel uvnitř MySQL serveru a lze je použít v příkazech SQL.
  • Uživatelsky definované funkce jsou vytvářeny venku MySQL a lze je začlenit do MySQL serveru.