Funcții MySQL: șir, numeric, definite de utilizator, stocate

Anonim

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.