MySQL Funktioner: Streng, Numerisk, Brugerdefineret, Lagret
Hvad er funktioner?
MySQL kan meget mere end blot at gemme og hente data. Vi kan også udføre manipulationer på dataene før du henter eller gemmer det. Det er der MySQL Funktioner kommer ind. Funktioner er simpelthen kodestykker, der udfører nogle handlinger og derefter returnerer et resultat. Nogle funktioner accepterer parametre, mens andre funktioner ikke accepterer parametre.
Lad os kort se på et eksempel på MySQL fungere. Som standard, MySQL gemmer datodatatyper i formatet "ÅÅÅÅ-MM-DD". Antag, at vi har bygget en applikation, og vores brugere ønsker, at datoen skal returneres i formatet "DD-MM-ÅÅÅÅ", kan vi bruge MySQL indbygget funktion DATE_FORMAT for at opnå dette. DATE_FORMAT er en af de mest brugte funktioner i MySQL. Vi vil se nærmere på det, efterhånden som vi udfolder lektionen.
Hvorfor bruge funktioner?
Baseret på eksemplet givet i indledningen kan folk med erfaring i computerprogrammering tænke "Hvorfor gider MySQL Funktioner? Den samme effekt kan opnås med scripting/programmeringssprog?” Det er rigtigt, at vi kan opnå det ved at skrive nogle procedurer/funktioner i ansøgningsprogrammet.
For at komme tilbage til vores DATE-eksempel i introduktionen, for at vores brugere kan få dataene i det ønskede format, skal forretningslaget udføre den nødvendige behandling.
Dette bliver et problem, når applikationen skal integreres med andre systemer. Når vi bruger MySQL funktioner såsom DATE_FORMAT, så kan vi have den funktionalitet indlejret i databasen, og enhver applikation, der har brug for dataene, får den i det krævede format. Det her reducerer omarbejde i forretningslogikken og reducerer datainkonsistens.
En anden grund til, at vi bør overveje at bruge MySQL funktioner er, at det kan hjælpe med at reducere netværkstrafikken i klient/server-applikationer. Business Layer behøver kun at foretage opkald til de lagrede funktioner uden behov for at manipulere data. I gennemsnit kan brugen af funktioner bidrage til at forbedre den samlede systemydeevne betydeligt.
Typer af funktioner
Indbyggede funktioner
MySQL leveres med en række indbyggede funktioner. Indbyggede funktioner er simpelthen funktioner, der allerede er implementeret i MySQL server. Disse funktioner giver os mulighed for at udføre forskellige typer manipulationer på dataene. De indbyggede funktioner kan grundlæggende kategoriseres i følgende mest brugte kategorier.
- Strings funktioner – operere på strengdatatyper
- Numeriske funktioner – operere på numeriske datatyper
- Dato funktioner – operere på datodatatyper
- Samlede funktioner – operere på alle ovenstående datatyper og producere opsummerede resultatsæt.
- Andre funktioner - MySQL understøtter også andre typer indbyggede funktioner, men vi vil begrænse vores lektion til kun de ovennævnte funktioner.
Lad os nu se nærmere på hver af funktionerne nævnt ovenfor. Vi vil forklare de mest brugte funktioner ved hjælp af vores "Myflixdb".
String funktioner
Vi har allerede set på, hvad strengfunktioner gør. Vi vil se på et praktisk eksempel, der bruger dem. I vores filmtabel er filmtitlerne gemt ved hjælp af kombinationer af små og store bogstaver. Antag, at vi ønsker at få en forespørgselsliste, der returnerer filmtitlerne med store bogstaver. Vi kan bruge "UCASE"-funktionen til at gøre det. Den tager en streng som parameter og konverterer alle bogstaver til store bogstaver. Scriptet vist nedenfor demonstrerer brugen af "UCASE"-funktionen.
SELECT `movie_id`,`title`, UCASE(`title`) FROM `movies`;
HER
- UCASE(`titel`) er den indbyggede funktion, der tager titlen som en parameter og returnerer den med store bogstaver med aliasnavnet `store_case_title`.
Udførelse af ovenstående script i MySQL workbench mod Myflixdb giver os 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 understøtter en række strengfunktioner. For en komplet liste over alle de indbyggede strengfunktioner, se dette link http://dev.mysql.com/doc/refman/5.0/en/string-functions.html on MySQL internet side.
Numeriske funktioner
Som tidligere nævnt fungerer disse funktioner på numeriske datatyper. Vi kan udføre matematiske beregninger på numeriske data i SQL-sætningerne.
Aritematiske operatorer
MySQL understøtter følgende aritmatiske operatorer, der kan bruges til at udføre beregninger i SQL-sætningerne.
Navn | Description |
---|---|
DIV | Heltalsafdeling |
/ | Afdeling |
- | Subtraktion |
+ | Tilsætning |
* | Multiplikation |
% eller MOD | modulus |
Lad os nu se på eksempler på hver af ovenstående operatører
Integer Division (DIV)
SELECT 23 DIV 6 ;
Udførelse af ovenstående script giver os følgende resultater.
3
Divisionsoperatør (/)
Lad os nu se på divisionsoperatøreksemplet. Vi vil ændre DIV-eksemplet.
SELECT 23 / 6 ;
Udførelse af ovenstående script giver os følgende resultater.
3.8333
Subtraktionsoperator (-)
Lad os nu se på subtraktionsoperatoreksemplet. Vi vil bruge de samme værdier som i de to foregående eksempler
SELECT 23 - 6 ;
Udførelse af ovenstående script giver os 17
Tilføjelsesoperator (+)
Lad os nu se på additionsoperatoreksemplet. Vi vil ændre det foregående eksempel.
SELECT 23 + 6 ;
Udførelse af ovenstående script giver os 29
Multiplikationsoperator (*)
Lad os nu se på eksemplet med multiplikationsoperatoren. Vi vil bruge de samme værdier som i de foregående eksempler.
SELECT 23 * 6 AS `multiplication_result`;
Udførelse af ovenstående script giver os følgende resultater.
multiplikationsresultat |
---|
138 |
Modulo-operator (-)
Modulo-operatoren deler N med M og giver os resten. Lad os nu se på modulo-operatoreksemplet. Vi vil bruge de samme værdier som i de foregående eksempler.
SELECT 23 % 6 ;
OR
SELECT 23 MOD 6 ;
Udførelse af ovenstående script giver os 5
Lad os nu se på nogle af de almindelige numeriske funktioner i MySQL.
Gulvlampe – denne funktion fjerner decimaler fra et tal og runder det af til det nærmeste laveste tal. Scriptet vist nedenfor demonstrerer dets brug.
SELECT FLOOR(23 / 6) AS `floor_result`;
Udførelse af ovenstående script giver os følgende resultater.
Etage_resultat |
---|
3 |
Rund – denne funktion afrunder et tal med decimaler til nærmeste hele tal. Scriptet vist nedenfor demonstrerer dets brug.
SELECT ROUND(23 / 6) AS `round_result`;
Udførelse af ovenstående script giver os følgende resultater.
Round_result |
---|
4 |
Rand – denne funktion bruges til at generere et tilfældigt tal, dets værdi ændres hver gang funktionen kaldes. Scriptet vist nedenfor demonstrerer dets brug.
SELECT RAND() AS `random_result`;
Gemte funktioner
Lagrede funktioner er ligesom indbyggede funktioner, bortset fra at du selv skal definere den lagrede funktion. Når en lagret funktion er blevet oprettet, kan den bruges i SQL-sætninger ligesom enhver anden funktion. Den grundlæggende syntaks for at oprette en lagret funktion er som vist nedenfor
CREATE FUNCTION sf_name ([parameter(s)]) RETURNS data type DETERMINISTIC STATEMENTS
HER
- "CREATE FUNCTION sf_name ([parameter(s)]) " er obligatorisk og fortæller MySQL server for at oprette en funktion ved navn `sf_name' med valgfrie parametre defineret i parentes.
- "RETURNERER datatype" er obligatorisk og angiver den datatype, som funktionen skal returnere.
- "DETERMINISTISK" betyder, at funktionen returnerer de samme værdier, hvis de samme argumenter leveres til den.
- "UDTALELSER" er den proceduremæssige kode, som funktionen udfører.
Lad os nu se på et praktisk eksempel, der implementerer en indbygget funktion. Antag, at vi gerne vil vide, hvilke lejede film der har overskredet returdatoen. Vi kan oprette en gemt funktion, der accepterer returdatoen som parameter og derefter sammenligner den med den aktuelle dato i MySQL server. Hvis den aktuelle dato er mindre end datoen for returfilmen, så returnerer vi "Nej", ellers returnerer vi "Ja". Scriptet vist nedenfor hjælper os med at opnå 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|
Udførelse af ovenstående script skabte den lagrede funktion `sf_past_movie_return_date`.
Lad os nu teste vores lagrede funktion.
SELECT `movie_id`,`membership_number`,`return_date`,CURDATE() ,sf_past_movie_return_date(`return_date`) FROM `movierentals`;
Udførelse af ovenstående script i MySQL workbench mod myflixdb giver os 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 |
Brugerdefinerede funktioner
MySQL understøtter også brugerdefinerede funktioner, der udvider MySQL. Brugerdefinerede funktioner er funktioner, som du kan oprette ved hjælp af et programmeringssprog som f.eks C, C++ osv. og derefter tilføje dem til MySQL server. Når de er tilføjet, kan de bruges ligesom enhver anden funktion.
Resumé
- Funktioner giver os mulighed for at forbedre mulighederne for MySQL.
- Funktioner returnerer altid en værdi og kan valgfrit acceptere parametre.
- Indbyggede funktioner er funktioner, der leveres med MySQL. De kan kategoriseres efter de datatyper, de opererer på, dvs. strenge, dato og numeriske indbyggede funktioner.
- Gemte funktioner oprettes af brugeren indenfor MySQL server og kan bruges i SQL-sætninger.
- Brugerdefinerede funktioner oprettes udenfor MySQL og kan indgå i MySQL serveren.