Ce sunt funcțiile?
MySQL poate face mult mai mult decât să stocheze și să recupereze date . De asemenea, putem efectua manipulări asupra datelor înainte de a le prelua sau salva. Aici intervin funcțiile MySQL. Funcțiile sunt pur și simplu bucăți de cod care efectuează unele operații și apoi returnează un rezultat. Unele funcții acceptă parametri, în timp ce alte funcții nu acceptă parametrii.
Să vedem pe scurt un exemplu de funcție MySQL. În mod implicit, MySQL salvează tipurile de date date în formatul "AAAA-LL-ZZ". Să presupunem că am creat o aplicație și utilizatorii noștri doresc ca data să fie returnată în formatul "ZZ-LL-AAAA", putem folosi MySQL încorporată în funcția DATE_FORMAT pentru a realiza acest lucru. DATE_FORMAT este una dintre cele mai utilizate funcții în MySQL. O vom analiza mai detaliat pe măsură ce vom desfășura lecția.
De ce să folosiți funcțiile?
Pe baza exemplului dat în introducere, persoanele cu experiență în programarea computerelor s-ar putea gândi „De ce să deranjez funcțiile MySQL? Același efect poate fi obținut cu limbajul de scriptare / programare?” Este adevărat că putem realiza acest lucru scriind unele proceduri / funcții în programul de aplicație.
Revenind la exemplul DATE din introducere, pentru ca utilizatorii noștri să obțină datele în formatul dorit, stratul de afaceri va trebui să efectueze procesarea necesară.
Aceasta devine o problemă atunci când aplicația trebuie să se integreze cu alte sisteme. Când folosim funcții MySQL, cum ar fi DATE_FORMAT, atunci putem avea această funcționalitate încorporată în baza de date și orice aplicație care are nevoie de date o primește în formatul necesar. Acest lucru reduce reluarea în logica de afaceri și reduce neconcordanțele de date.
Un alt motiv pentru care ar trebui să luăm în considerare utilizarea funcțiilor MySQL este faptul că poate ajuta la reducerea traficului de rețea în aplicațiile client / server . Business Layer va trebui să apeleze la funcțiile stocate fără a fi nevoie să manipuleze datele. În medie, utilizarea funcțiilor poate ajuta la îmbunătățirea semnificativă a performanței generale a sistemului.
Tipuri de funcții
Funcții încorporate
MySQL vine la pachet cu o serie de funcții încorporate. Funcțiile încorporate sunt pur și simplu funcții deja implementate în serverul MySQL. Aceste funcții ne permit să efectuăm diferite tipuri de manipulări asupra datelor. Funcțiile încorporate pot fi clasificate practic în următoarele categorii cele mai utilizate.
- Funcții șiruri - funcționează pe tipuri de date șir
- Funcții numerice - operează pe tipuri de date numerice
- Funcții date - funcționează la tipurile de date date
- Funcții agregate - funcționează pe toate tipurile de date de mai sus și produc seturi de rezultate rezumate.
- Alte funcții - MySQL acceptă și alte tipuri de funcții încorporate, dar ne vom limita lecția doar la funcțiile menționate mai sus.
Să vedem acum în detaliu fiecare dintre funcțiile menționate mai sus. Vom explica cele mai utilizate funcții folosind „Myflixdb”.
Funcții de șir
Ne-am uitat deja la ceea ce fac funcțiile șirului. Ne vom uita la un exemplu practic care le folosește. În tabelul nostru cu filme, titlurile filmelor sunt stocate folosind combinații de litere mici și mari. Să presupunem că dorim să obținem o listă de interogări care returnează titlurile filmelor cu litere mari. Putem folosi funcția „UCASE” pentru a face acest lucru. Ia un șir ca parametru și convertește toate literele cu majuscule. Scriptul prezentat mai jos demonstrează utilizarea funcției "UCASE".
SELECT `movie_id`,`title`, UCASE(`title`) FROM `movies`;
AICI
- UCASE („title”) este funcția încorporată care ia titlul ca parametru și îl returnează cu litere mari cu numele aliasului „upper_case_title”.
Executarea scriptului de mai sus în MySQL workbench împotriva Myflixdb ne oferă următoarele rezultate prezentate mai jos.
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 acceptă o serie de funcții de șir. Pentru o listă completă a tuturor funcțiilor de șir încorporate, consultați acest link http://dev.mysql.com/doc/refman/5.0/en/string-functions.html pe site-ul MySQL.
Funcții numerice
După cum sa menționat anterior, aceste funcții funcționează pe tipuri de date numerice. Putem efectua calcule matematice pe date numerice în instrucțiunile SQL.
Operatori aritematici
MySQL acceptă următorii operatori aritmatici care pot fi utilizați pentru efectuarea calculelor în instrucțiunile SQL.
Nume |
Descriere |
---|---|
DIV |
Diviziunea întregi |
/ |
Divizia |
- |
Scădere |
+ |
Plus |
* |
Multiplicare |
% sau MOD |
Modulul |
Să vedem acum exemple de fiecare dintre operatorii de mai sus
Divizia Integer (DIV)
SELECT 23 DIV 6 ;
Executarea scriptului de mai sus ne oferă următoarele rezultate.
3
Operator divizie (/)
Să vedem acum exemplul operatorului de divizie. Vom modifica exemplul DIV.
SELECT 23 / 6 ;
Executarea scriptului de mai sus ne oferă următoarele rezultate.
3.8333
Operator de scădere (-)
Să vedem acum exemplul operatorului de scădere. Vom folosi aceleași valori ca în cele două exemple precedente
SELECT 23 - 6 ;
Executarea scriptului de mai sus ne oferă 17
Operator de adăugare (+)
Să vedem acum exemplul operatorului de adăugare. Vom modifica exemplul anterior.
SELECT 23 + 6 ;
Executarea scriptului de mai sus ne oferă 29
Operator de multiplicare (*)
Să vedem acum exemplul operatorului de multiplicare. Vom folosi aceleași valori ca în exemplele anterioare.
SELECT 23 * 6 AS `multiplication_result`;
Executarea scriptului de mai sus ne oferă următoarele rezultate.
multiplicare_rezultat |
138 |
Operator Modulo (-)
Operatorul modulo împarte N la M și ne dă restul. Să vedem acum exemplul operatorului modulo. Vom folosi aceleași valori ca în exemplele anterioare.
SELECT 23 % 6 ;
SAU
SELECT 23 MOD 6 ;
Executarea scriptului de mai sus ne oferă 5
Să vedem acum câteva dintre funcțiile numerice comune în MySQL.
Etaj - această funcție elimină locurile zecimale dintr-un număr și îl rotunjește la cel mai apropiat număr cel mai mic. Scriptul prezentat mai jos demonstrează utilizarea acestuia.
SELECT FLOOR(23 / 6) AS `floor_result`;
Executarea scriptului de mai sus ne oferă următoarele rezultate.
Rezultat_ etaj |
3 |
Rotund - această funcție rotunjește un număr cu zecimale la cel mai apropiat număr întreg. Scriptul prezentat mai jos demonstrează utilizarea acestuia.
SELECT ROUND(23 / 6) AS `round_result`;
Executarea scriptului de mai sus ne oferă următoarele rezultate.
Rezultat_rund |
4 |
Rand - această funcție este utilizată pentru a genera un număr aleator, valoarea acestuia se schimbă de fiecare dată când este apelată funcția. Scriptul prezentat mai jos demonstrează utilizarea acestuia.
SELECT RAND() AS `random_result`;
Funcții stocate
Funcțiile stocate sunt la fel ca funcțiile încorporate, cu excepția faptului că trebuie să definiți singur funcția stocată. Odată ce a fost creată o funcție stocată, aceasta poate fi utilizată în instrucțiuni SQL la fel ca orice altă funcție. Sintaxa de bază pentru crearea unei funcții stocate este cea prezentată mai jos
CREATE FUNCTION sf_name ([parameter(s)])RETURNS data typeDETERMINISTICSTATEMENTS
AICI
- „CREATE FUNCTION sf_name ([parameter (s)])” este obligatoriu și îi spune serverului MySQL să creeze o funcție numită `sf_name 'cu parametrii opționali definiți în paranteză.
- „RETURNS type de date” este obligatoriu și specifică tipul de date pe care funcția ar trebui să îl returneze.
- „DETERMINISTIC” înseamnă că funcția va returna aceleași valori dacă i se furnizează aceleași argumente.
- „DECLARAȚII” este codul de procedură pe care funcția îl execută.
Să vedem acum un exemplu practic care implementează o funcție încorporată. Să presupunem că vrem să știm ce filme închiriate au depășit data returnării. Putem crea o funcție stocată care acceptă data de returnare ca parametru și apoi o compară cu data curentă în serverul MySQL. Dacă data curentă este mai mică decât data filmului de întoarcere, atunci returnăm „Nu”, altfel returnăm „Da”. Scriptul prezentat mai jos ne ajută să realizăm acest lucru.
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|
Executarea scriptului de mai sus a creat funcția stocată `sf_past_movie_return_date`.
Să testăm acum funcția noastră stocată.
SELECT `movie_id`,`membership_number`,`return_date`,CURDATE() ,sf_past_movie_return_date(`return_date`) FROM `movierentals`;
Executarea scriptului de mai sus în MySQL workbench împotriva myflixdb ne oferă următoarele rezultate.
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 |
Funcții definite de utilizator
MySQL acceptă, de asemenea, funcții definite de utilizator care extind MySQL. Funcțiile definite de utilizator sunt funcții pe care le puteți crea folosind un limbaj de programare precum C, C ++ etc. și apoi să le adăugați la serverul MySQL. Odată adăugate, ele pot fi utilizate la fel ca orice altă funcție.
rezumat
- Funcțiile ne permit să îmbunătățim capacitățile MySQL.
- Funcțiile returnează întotdeauna o valoare și pot accepta opțional parametrii.
- Funcțiile încorporate sunt funcții livrate împreună cu MySQL. Ele pot fi clasificate în funcție de tipurile de date pe care le operează, adică șiruri, date și funcții numerice încorporate.
- Funcțiile stocate sunt create de utilizator în cadrul serverului MySQL și pot fi utilizate în instrucțiunile SQL.
- Funcțiile definite de utilizator sunt create în afara MySQL și pot fi încorporate în serverul MySQL.