MySQL Funksjoner: streng, numerisk, brukerdefinert, lagret

Hva er funksjoner?

MySQL kan gjøre mye mer enn bare å lagre og hente data. Vi kan også utføre manipulasjoner på dataene før du henter eller lagrer det. Det er der MySQL Funksjoner kommer inn. Funksjoner er ganske enkelt kodebiter som utfører enkelte operasjoner og deretter returnerer et resultat. Noen funksjoner aksepterer parametere mens andre funksjoner ikke aksepterer parametere.

La oss kort se på et eksempel på MySQL funksjon. Som standard, MySQL lagrer datodatatyper i formatet "ÅÅÅÅ-MM-DD". Anta at vi har bygget en applikasjon og brukerne våre vil at datoen skal returneres i formatet "DD-MM-YYYY", kan vi bruke MySQL innebygd funksjon DATE_FORMAT for å oppnå dette. DATE_FORMAT er en av de mest brukte funksjonene i MySQL. Vi vil se på det mer detaljert etter hvert som vi utfolder leksjonen.

Hvorfor bruke funksjoner?

Hvorfor bruke funksjoner

Basert på eksemplet gitt i innledningen, kan personer med erfaring i dataprogrammering tenke "Hvorfor bry seg MySQL Funksjoner? Den samme effekten kan oppnås med skript-/programmeringsspråk?" Det er sant at vi kan oppnå det ved å skrive noen prosedyrer/funksjoner i søknadsprogrammet.

For å komme tilbake til vårt DATE-eksempel i introduksjonen, for at brukerne våre skal få dataene i ønsket format, må forretningslaget gjøre nødvendig behandling.

Dette blir et problem når applikasjonen skal integreres med andre systemer. Når vi bruker MySQL funksjoner som DATE_FORMAT, så kan vi ha denne funksjonaliteten innebygd i databasen, og enhver applikasjon som trenger dataene får den i det nødvendige formatet. Dette reduserer omarbeid i forretningslogikken og reduserer datainkonsekvenser.

En annen grunn til at vi bør vurdere å bruke MySQL funksjoner er det faktum at det kan bidra til å redusere nettverkstrafikk i klient-/serverapplikasjoner. Business Layer trenger bare å ringe til de lagrede funksjonene uten å måtte manipulere data. I gjennomsnitt kan bruken av funksjoner bidra til å forbedre den generelle systemytelsen betydelig.

Typer funksjoner

Innebygde funksjoner

MySQL leveres med en rekke innebygde funksjoner. Innebygde funksjoner er ganske enkelt funksjoner som allerede er implementert i MySQL server. Disse funksjonene lar oss utføre ulike typer manipulasjoner på dataene. De innebygde funksjonene kan i utgangspunktet kategoriseres i følgende mest brukte kategorier.

  • Strenger funksjoner – operere på strengdatatyper
  • Numeriske funksjoner – operere på numeriske datatyper
  • Datofunksjoner – operere på datodatatyper
  • Aggregerte funksjoner – operere på alle de ovennevnte datatypene og produsere oppsummerte resultatsett.
  • Andre funksjoner - MySQL støtter også andre typer innebygde funksjoner, men vi vil begrense leksjonen til de ovennevnte funksjonene.

La oss nå se på hver av funksjonene nevnt ovenfor i detalj. Vi vil forklare de mest brukte funksjonene ved å bruke vår "Myflixdb".

Strengefunksjoner

Vi har allerede sett på hva strengfunksjoner gjør. Vi skal se på et praktisk eksempel som bruker dem. I filmtabellen vår lagres filmtitlene ved å bruke kombinasjoner av små og store bokstaver. Anta at vi ønsker å få en spørringsliste som returnerer filmtitlene med store bokstaver. Vi kan bruke "UCASE"-funksjonen for å gjøre det. Den tar en streng som parameter og konverterer alle bokstavene til store bokstaver. Skriptet vist nedenfor demonstrerer bruken av "UCASE"-funksjonen.

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

HER

  • UCASE(`tittel`) er den innebygde funksjonen som tar tittelen som en parameter og returnerer den med store bokstaver med aliasnavnet `store_case_title`.

Utfører skriptet ovenfor i MySQL arbeidsbenk mot Myflixdb gir oss følgende resultater vist nedenfor.

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 støtter en rekke strengfunksjoner. For en fullstendig liste over alle de innebygde strengfunksjonene, se denne lenken http://dev.mysql.com/doc/refman/5.0/en/string-functions.html on MySQL nettside.

Numeriske funksjoner

Som tidligere nevnt, opererer disse funksjonene på numeriske datatyper. Vi kan utføre matematiske beregninger på numeriske data i SQL-setningene.

Aritematiske operatorer

MySQL støtter følgende aritmatiske operatorer som kan brukes til å utføre beregninger i SQL-setningene.

Navn Description
DIV Heltall divisjon
/ Divisjon
- Subtraksjon
+ Addisjon
* Multiplikasjon
% eller MOD modulus

La oss nå se på eksempler på hver av operatørene ovenfor

Integer Division (DIV)

SELECT 23 DIV 6 ;

Utførelse av skriptet ovenfor gir oss følgende resultater.

3

Divisjonsoperatør (/)

La oss nå se på divisjonsoperatøreksemplet. Vi vil modifisere DIV-eksemplet.

SELECT 23 / 6 ;

Utførelse av skriptet ovenfor gir oss følgende resultater.

3.8333

Subtraksjonsoperatør (-)

La oss nå se på subtraksjonsoperatoreksemplet. Vi vil bruke de samme verdiene som i de to foregående eksemplene

SELECT 23 - 6 ;

Utførelse av skriptet ovenfor gir oss 17

Tilleggsoperatør (+)

La oss nå se på tilleggsoperatøreksemplet. Vi vil endre det forrige eksemplet.

SELECT 23 + 6 ;

Utførelse av skriptet ovenfor gir oss 29

Multiplikasjonsoperator (*)

La oss nå se på multiplikasjonsoperatoreksemplet. Vi vil bruke de samme verdiene som i de foregående eksemplene.

SELECT 23 * 6 AS `multiplication_result`;

Utførelse av skriptet ovenfor gir oss følgende resultater.

multiplikasjonsresultat
138

Modulo-operatør (-)

Modulo-operatoren deler N med M og gir oss resten. La oss nå se på modulo-operatoreksemplet. Vi vil bruke de samme verdiene som i de foregående eksemplene.

SELECT 23 % 6 ;

OR

SELECT 23 MOD 6 ;

Utførelse av skriptet ovenfor gir oss 5

La oss nå se på noen av de vanlige numeriske funksjonene i MySQL.

Gulv – denne funksjonen fjerner desimaler fra et tall og runder det av til nærmeste laveste tall. Skriptet vist nedenfor demonstrerer bruken.

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

Utførelse av skriptet ovenfor gir oss følgende resultater.

Etasje_resultat
3

Rund – denne funksjonen runder av et tall med desimaler til nærmeste hele tall. Skriptet vist nedenfor demonstrerer bruken.

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

Utførelse av skriptet ovenfor gir oss følgende resultater.

Round_result
4

Rand – denne funksjonen brukes til å generere et tilfeldig tall, verdien endres hver gang funksjonen kalles opp. Skriptet vist nedenfor demonstrerer bruken.

SELECT RAND() AS `random_result`;

Lagrede funksjoner

Lagrede funksjoner er akkurat som innebygde funksjoner bortsett fra at du må definere den lagrede funksjonen selv. Når en lagret funksjon er opprettet, kan den brukes i SQL-setninger akkurat som alle andre funksjoner. Den grunnleggende syntaksen for å lage en lagret funksjon er som vist nedenfor

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

HER

  • "CREATE FUNCTION sf_name ([parameter(e)]) " er obligatorisk og forteller MySQL server for å lage en funksjon kalt `sf_name' med valgfrie parametere definert i parentes.
  • "RETURNERER datatype" er obligatorisk og spesifiserer datatypen som funksjonen skal returnere.
  • "DETERMINISTISK" betyr at funksjonen vil returnere de samme verdiene hvis de samme argumentene leveres til den.
  • "UTTALELSER" er den prosedyrekoden som funksjonen utfører.

La oss nå se på et praktisk eksempel som implementerer en innebygd funksjon. Anta at vi ønsker å vite hvilke leide filmer som har passert returdatoen. Vi kan lage en lagret funksjon som godtar returdatoen som parameter og deretter sammenligne den med gjeldende dato i MySQL server. Hvis gjeldende dato er mindre enn returfilmdatoen, returnerer vi "Nei", ellers returnerer vi "Ja". Skriptet vist nedenfor hjelper oss å oppnå det.

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|

Ved å kjøre skriptet ovenfor opprettet den lagrede funksjonen `sf_past_movie_return_date`.

La oss nå teste vår lagrede funksjon.

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

Utfører skriptet ovenfor i MySQL arbeidsbenk mot myflixdb gir oss følgende resultater.

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

Brukerdefinerte funksjoner

MySQL støtter også brukerdefinerte funksjoner som utvider seg MySQL. Brukerdefinerte funksjoner er funksjoner som du kan lage ved hjelp av et programmeringsspråk som f.eks C, C++ osv. og deretter legge dem til MySQL server. Når de er lagt til, kan de brukes akkurat som alle andre funksjoner.

Oppsummering

  • Funksjoner lar oss forbedre mulighetene til MySQL.
  • Funksjoner returnerer alltid en verdi og kan valgfritt godta parametere.
  • Innebygde funksjoner er funksjoner som leveres med MySQL. De kan kategoriseres i henhold til datatypene de opererer på, dvs. strenger, dato og numeriske innebygde funksjoner.
  • Lagrede funksjoner opprettes av brukeren innenfor MySQL server og kan brukes i SQL-setninger.
  • Brukerdefinerte funksjoner opprettes utenfor MySQL og kan inngå i MySQL server.