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 Tekniske beskrivelser
DIV Heltall divisjon
/ Divisjon
- Subtracsjon
+ 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

Subtracsjonsoperator (-)

La oss nรฅ se pรฅ subbentraceksempel pรฅ en sjonsoperator. Vi bruker 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.

Sammendrag

  • 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.

Oppsummer dette innlegget med: