Funkcie MySQL: reťazec, numerický, definovaný používateľom, uložený

Anonim

Čo sú to funkcie?

MySQL dokáže oveľa viac než len ukladanie a načítanie údajov . S údajmi môžeme tiež manipulovať pred ich načítaním alebo uložením. To je miesto, kde prichádzajú funkcie MySQL. Funkcie sú jednoducho časti kódu, ktoré vykonávajú určité operácie a potom vracajú výsledok. Niektoré funkcie akceptujú parametre, zatiaľ čo iné funkcie neakceptujú parametre.

Pozrime sa stručne na príklad funkcie MySQL. MySQL predvolene ukladá dátové dátové typy vo formáte „RRRR-MM-DD“. Predpokladajme, že sme vytvorili aplikáciu a naši používatelia chcú, aby sa dátum vrátil vo formáte „DD-MM-RRRR“, môžeme na to použiť MySQL zabudovanú funkciu DATE_FORMAT. DATE_FORMAT je jednou z najpoužívanejších funkcií v MySQL. Keď si rozložíme lekciu, pozrieme sa na to podrobnejšie.

Prečo používať funkcie?

Na základe príkladu uvedeného v úvode si ľudia so skúsenosťami s programovaním v počítači môžu myslieť „Prečo obťažovať funkcie MySQL? Rovnaký efekt je možné dosiahnuť aj pri skriptovacom / programovacom jazyku?“ Je pravda, že to môžeme dosiahnuť napísaním niektorých postupov / funkcií v aplikačnom programe.

Keď sa vrátime k nášmu príkladu DATE v úvode, aby naši používatelia získali údaje v požadovanom formáte, bude musieť podniková vrstva vykonať potrebné spracovanie.

To sa stáva problémom, keď sa aplikácia musí integrovať s inými systémami. Keď používame funkcie MySQL, ako je DATE_FORMAT, môžeme mať túto funkcionalitu zabudovanú do databázy a každá aplikácia, ktorá dáta potrebuje, ju dostane v požadovanom formáte. Toto obmedzuje prepracovanie obchodnej logiky a znižuje nekonzistenciu údajov.

Ďalším dôvodom, prečo by sme mali zvážiť použitie funkcií MySQL, je skutočnosť, že môže pomôcť znížiť sieťový prenos v aplikáciách klient / server . Business Layer bude musieť iba volať uložené funkcie bez potreby manipulácie s dátami. Používanie funkcií môže v priemere pomôcť výrazne zlepšiť celkový výkon systému.

Druhy funkcií

Zabudované funkcie

MySQL je dodávaný s množstvom zabudovaných funkcií. Zabudované funkcie sú jednoducho funkcie, ktoré sú už implementované na serveri MySQL. Tieto funkcie nám umožňujú vykonávať rôzne typy manipulácií s údajmi. Zabudované funkcie je možné v zásade rozdeliť do nasledujúcich najpoužívanejších kategórií.

  • Funkcie reťazcov - fungujú na dátových typoch reťazcov
  • Numerické funkcie - fungujú na numerických dátových typoch
  • Funkcie dátumu - fungujú na dátových typoch dátumu
  • Agregované funkcie - pracujú so všetkými vyššie uvedenými typmi údajov a vytvárajú súhrnné súbory výsledkov.
  • Ďalšie funkcie - MySQL podporuje aj iné typy zabudovaných funkcií, ale lekciu obmedzíme iba na vyššie uvedené funkcie.

Pozrime sa teraz na každú z vyššie spomenutých funkcií podrobne. Najpoužívanejšie funkcie vysvetlíme pomocou našej aplikácie „Myflixdb“.

Funkcie reťazca

Už sme sa pozreli na to, čo fungujú reťazcové funkcie. Pozrime sa na praktický príklad, ktorý ich využíva. V našej tabuľke filmov sú názvy filmov ukladané pomocou kombinácií malých a veľkých písmen. Predpokladajme, že chceme získať zoznam dotazov, ktorý vráti názvy filmov veľkými písmenami. Môžeme na to použiť funkciu „UCASE“. Berie reťazec ako parameter a prevádza všetky písmená na veľké písmená. Skript uvedený nižšie demonštruje použitie funkcie „UCASE“.

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

TU

  • UCASE (`title`) je vstavaná funkcia, ktorá berie nadpis ako parameter a vracia ho veľkými písmenami s aliasom názvu` upper_case_title`.

Vykonanie vyššie uvedeného skriptu v pracovnom stole MySQL proti Myflixdb nám dáva nasledujúce výsledky uvedené nižšie.

 
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 množstvo reťazcových funkcií. Úplný zoznam všetkých zabudovaných funkcií reťazcov nájdete na tomto odkaze http://dev.mysql.com/doc/refman/5.0/en/string-functions.html na webovej stránke MySQL.

Numerické funkcie

Ako už bolo spomenuté vyššie, tieto funkcie pracujú na numerických údajových typoch. Matematické výpočty môžeme vykonávať na číselných údajoch vo príkazoch SQL.

Aritematické operátory

MySQL podporuje nasledujúce aritmatické operátory, ktoré možno použiť na vykonávanie výpočtov v príkazoch SQL.

názov

Popis

DIV

Celé delenie

/

Divízia

-

Odčítanie

+

Dodatok

*

Násobenie

% alebo MOD

Modul

Pozrime sa teraz na príklady každého z vyššie uvedených operátorov

Integer Division (DIV)

SELECT 23 DIV 6 ;

Vykonanie vyššie uvedeného skriptu nám prinesie nasledujúce výsledky.

3

Operátor divízie (/)

Pozrime sa teraz na príklad operátora delenia. Upravíme príklad DIV.

SELECT 23 / 6 ;

Vykonanie vyššie uvedeného skriptu nám prinesie nasledujúce výsledky.

3,8333

Operátor odčítania (-)

Pozrime sa teraz na príklad operátora odčítania. Použijeme rovnaké hodnoty ako v predchádzajúcich dvoch príkladoch

SELECT 23 - 6 ;

Vykonanie vyššie uvedeného skriptu nám dáva 17

Operátor sčítania (+)

Pozrime sa teraz na príklad operátora pridania. Upravíme predchádzajúci príklad.

SELECT 23 + 6 ;

Vykonanie vyššie uvedeného skriptu nám dáva 29

Operátor násobenia (*)

Pozrime sa teraz na príklad operátora násobenia. Použijeme rovnaké hodnoty ako v predchádzajúcich príkladoch.

SELECT 23 * 6 AS `multiplication_result`;

Vykonanie vyššie uvedeného skriptu nám prinesie nasledujúce výsledky.

multiplication_result

138

Modulový operátor (-)

Operátor modulo vydelí N číslom M a dá nám zvyšok. Pozrime sa teraz na príklad modulo operátora. Použijeme rovnaké hodnoty ako v predchádzajúcich príkladoch.

SELECT 23 % 6 ;

ALEBO

SELECT 23 MOD 6 ;

Vykonanie vyššie uvedeného skriptu nám dá 5

Pozrime sa teraz na niektoré bežné numerické funkcie v MySQL.

Poschodie - táto funkcia odstráni desatinné miesta z čísla a zaokrúhli ho na najbližšie najnižšie číslo. Skript uvedený nižšie demonštruje jeho použitie.

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

Vykonanie vyššie uvedeného skriptu nám prinesie nasledujúce výsledky.

Floor_result

3

Zaokrúhliť - táto funkcia zaokrúhli číslo s desatinnými miestami na najbližšie celé číslo. Skript uvedený nižšie demonštruje jeho použitie.

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

Vykonanie vyššie uvedeného skriptu nám prinesie nasledujúce výsledky.

Round_result

4

Rand - táto funkcia slúži na generovanie náhodného čísla, jeho hodnota sa mení zakaždým, keď sa funkcia volá. Skript uvedený nižšie demonštruje jeho použitie.

SELECT RAND() AS `random_result`;

Uložené funkcie

Uložené funkcie sú rovnako ako vstavané funkcie, okrem toho, že musíte sami definovať uloženú funkciu. Po vytvorení uloženej funkcie ju možno v príkazoch SQL použiť ako ktorúkoľvek inú funkciu. Základná syntax pre vytvorenie uloženej funkcie je uvedená nižšie

CREATE FUNCTION sf_name ([parameter(s)])RETURNS data typeDETERMINISTICSTATEMENTS

TU

  • „CREATE FUNCTION sf_name ([parameter (s)])“ je povinné a informuje server MySQL, aby vytvoril funkciu s názvom „sf_name“ s voliteľnými parametrami definovanými v zátvorkách.
  • „Údajový typ RETURNS“ je povinný a určuje dátový typ, ktorý by mala funkcia vrátiť.
  • „DETERMINISTIC“ znamená, že funkcia vráti rovnaké hodnoty, ak sú jej poskytnuté rovnaké argumenty.
  • „STATEMENTS“ je procedurálny kód, ktorý funkcia vykonáva.

Pozrime sa teraz na praktický príklad, ktorý implementuje zabudovanú funkciu. Predpokladajme, že by sme chceli vedieť, ktoré požičané filmy sú po dátume návratu. Môžeme vytvoriť uloženú funkciu, ktorá akceptuje dátum návratu ako parameter a potom ho porovnáva s aktuálnym dátumom na serveri MySQL. Ak je aktuálny dátum menší ako dátum návratu filmu, vrátime „Nie“, inak vrátime „Áno“. To nám pomáha dosiahnuť skript uvedený nižšie.

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|

Vykonaním vyššie uvedeného skriptu vznikla uložená funkcia `sf_past_movie_return_date`.

Poďme si teraz otestovať našu uloženú funkciu.

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

Vykonanie vyššie uvedeného skriptu v pracovnej ploche MySQL proti myflixdb nám dáva nasledujúce 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žívateľom definované funkcie

MySQL podporuje aj užívateľom definované funkcie, ktoré rozširujú MySQL. Užívateľom definované funkcie sú funkcie, ktoré môžete vytvoriť pomocou programovacieho jazyka ako C, C ++ atď. A potom ich pridať na server MySQL. Po pridaní je možné ich použiť ako každú inú funkciu.

Zhrnutie

  • Funkcie nám umožňujú vylepšiť možnosti MySQL.
  • Funkcie vždy vrátia hodnotu a môžu voliteľne prijať parametre.
  • Zabudované funkcie sú funkcie dodávané s MySQL. Môžu byť kategorizované podľa dátových typov, s ktorými pracujú, tj reťazcov, dátumu a číselných vstavaných funkcií.
  • Uložené funkcie vytvára užívateľ na serveri MySQL a dajú sa použiť v príkazoch SQL.
  • Užívateľom definované funkcie sú vytvárané mimo MySQL a môžu byť začlenené do MySQL servera.