Wat zijn functies?
MySQL kan veel meer dan alleen gegevens opslaan en ophalen . We kunnen ook manipulaties op de gegevens uitvoeren voordat we deze ophalen of opslaan. Dat is waar MySQL-functies om de hoek komen kijken. Functies zijn gewoon stukjes code die bepaalde bewerkingen uitvoeren en vervolgens een resultaat retourneren. Sommige functies accepteren parameters, terwijl andere functies geen parameters accepteren.
Laten we kort kijken naar een voorbeeld van de MySQL-functie. MySQL slaat standaard datatypes op in het formaat "JJJJ-MM-DD". Stel dat we een applicatie hebben gebouwd en onze gebruikers willen dat de datum wordt geretourneerd in het formaat "DD-MM-JJJJ", dan kunnen we de ingebouwde MySQL-functie DATE_FORMAT gebruiken om dit te bereiken. DATE_FORMAT is een van de meest gebruikte functies in MySQL. We zullen er meer in detail naar kijken terwijl we de les ontvouwen.
Waarom functies gebruiken?
Op basis van het voorbeeld dat in de inleiding wordt gegeven, denken mensen met ervaring met computerprogrammering misschien: "Waarom zou u zich bezighouden met MySQL-functies? Hetzelfde effect kan worden bereikt met scripting / programmeertaal?" Het is waar dat we dat kunnen bereiken door een aantal procedures / functies in het applicatieprogramma te schrijven.
Terugkomend op ons DATE-voorbeeld in de inleiding, zullen onze gebruikers de gegevens in het gewenste formaat moeten krijgen als de bedrijfslaag de nodige bewerkingen moet uitvoeren.
Dit wordt een probleem wanneer de applicatie moet worden geïntegreerd met andere systemen. Wanneer we MySQL-functies gebruiken, zoals de DATE_FORMAT, dan kunnen we die functionaliteit in de database laten insluiten en elke applicatie die de gegevens nodig heeft, krijgt deze in het vereiste formaat. Dit vermindert herwerk in de bedrijfslogica en vermindert gegevensinconsistenties.
Een andere reden waarom we zouden moeten overwegen om MySQL-functies te gebruiken, is het feit dat het kan helpen het netwerkverkeer in client / servertoepassingen te verminderen . De Business Layer hoeft alleen de opgeslagen functies aan te roepen zonder dat er gegevens moeten worden gemanipuleerd. Gemiddeld kan het gebruik van functies de algehele systeemprestaties aanzienlijk helpen verbeteren.
Soorten functies
Ingebouwde functies
MySQL wordt geleverd met een aantal ingebouwde functies. Ingebouwde functies zijn gewoon functies die al zijn geïmplementeerd in de MySQL-server. Met deze functies kunnen we verschillende soorten manipulaties op de gegevens uitvoeren. De ingebouwde functies kunnen in principe worden onderverdeeld in de volgende meest gebruikte categorieën.
- Strings-functies - werken op string-gegevenstypen
- Numerieke functies - werken op numerieke gegevenstypen
- Datumfuncties - werken op datatypen van datums
- Geaggregeerde functies - werken op alle bovenstaande gegevenstypen en produceren samengevatte resultaatsets.
- Andere functies - MySQL ondersteunt ook andere soorten ingebouwde functies, maar we zullen onze les beperken tot de hierboven genoemde functies.
Laten we nu elk van de hierboven genoemde functies in detail bekijken. We zullen de meest gebruikte functies uitleggen met behulp van onze "Myflixdb".
String-functies
We hebben al gekeken naar wat stringfuncties doen. We zullen kijken naar een praktisch voorbeeld dat ze gebruikt. In onze filmtabel worden de filmtitels opgeslagen met combinaties van kleine letters en hoofdletters. Stel dat we een vragenlijst willen krijgen die de filmtitels in hoofdletters teruggeeft. We kunnen de functie "UCASE" gebruiken om dat te doen. Het neemt een string als parameter en converteert alle letters naar hoofdletters. Het onderstaande script demonstreert het gebruik van de functie "UCASE".
SELECT `movie_id`,`title`, UCASE(`title`) FROM `movies`;
HIER
- UCASE (`title`) is de ingebouwde functie die de titel als parameter neemt en deze teruggeeft in hoofdletters met de aliasnaam` upper_case_title`.
Het uitvoeren van het bovenstaande script in MySQL-workbench tegen de Myflixdb geeft ons de volgende resultaten die hieronder worden weergegeven.
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 ondersteunt een aantal stringfuncties. Voor een volledige lijst van alle ingebouwde stringfuncties, refereer je naar deze link http://dev.mysql.com/doc/refman/5.0/en/string-functions.html op de MySQL-website.
Numerieke functies
Zoals eerder vermeld, werken deze functies op numerieke gegevenstypen. We kunnen wiskundige berekeningen uitvoeren op numerieke gegevens in de SQL-instructies.
Rekenkundige operatoren
MySQL ondersteunt de volgende rekenkundige operatoren die kunnen worden gebruikt om berekeningen uit te voeren in de SQL-instructies.
Naam |
Omschrijving |
---|---|
DIV |
Geheel getal divisie |
|
Divisie |
|
Aftrekken |
|
Toevoeging |
|
Vermenigvuldiging |
% of MOD |
Modulus |
Laten we nu eens kijken naar voorbeelden van elk van de bovenstaande operatoren
Integer Divisie (DIV)
SELECT 23 DIV 6 ;
Het uitvoeren van het bovenstaande script geeft ons de volgende resultaten.
3
Divisie-operator (/)
Laten we nu eens kijken naar het voorbeeld van de divisie-operator. We zullen het DIV-voorbeeld aanpassen.
SELECT 23 / 6 ;
Het uitvoeren van het bovenstaande script geeft ons de volgende resultaten.
3.8333
Operator voor aftrekken (-)
Laten we nu eens kijken naar het voorbeeld van de aftrekoperator. We zullen dezelfde waarden gebruiken als in de vorige twee voorbeelden
SELECT 23 - 6 ;
Het uitvoeren van het bovenstaande script geeft ons 17
Opteloperator (+)
Laten we nu eens kijken naar het voorbeeld van de opteloperator. We zullen het vorige voorbeeld aanpassen.
SELECT 23 + 6 ;
Het uitvoeren van het bovenstaande script geeft ons 29
Operator voor vermenigvuldiging (*)
Laten we nu eens kijken naar het voorbeeld van de vermenigvuldigingsoperator. We zullen dezelfde waarden gebruiken als in de vorige voorbeelden.
SELECT 23 * 6 AS `multiplication_result`;
Het uitvoeren van het bovenstaande script geeft ons de volgende resultaten.
multiplication_result |
138 |
Modulo-operator (-)
De modulo-operator deelt N door M en geeft ons de rest. Laten we nu eens kijken naar het voorbeeld van de modulo-operator. We zullen dezelfde waarden gebruiken als in de vorige voorbeelden.
SELECT 23 % 6 ;
OF
SELECT 23 MOD 6 ;
Het uitvoeren van het bovenstaande script geeft ons 5
Laten we nu eens kijken naar enkele van de algemene numerieke functies in MySQL.
Vloer - deze functie verwijdert decimalen van een getal en rondt dit af naar het dichtstbijzijnde laagste getal. Het onderstaande script demonstreert het gebruik ervan.
SELECT FLOOR(23 / 6) AS `floor_result`;
Het uitvoeren van het bovenstaande script geeft ons de volgende resultaten.
Floor_result |
3 |
Afronden - deze functie rondt een getal met decimalen af op het dichtstbijzijnde gehele getal. Het onderstaande script demonstreert het gebruik ervan.
SELECT ROUND(23 / 6) AS `round_result`;
Het uitvoeren van het bovenstaande script geeft ons de volgende resultaten.
Round_result |
4 |
Rand - deze functie wordt gebruikt om een willekeurig getal te genereren, de waarde ervan verandert elke keer dat de functie wordt aangeroepen. Het onderstaande script demonstreert het gebruik ervan.
SELECT RAND() AS `random_result`;
Opgeslagen functies
Opgeslagen functies zijn net als ingebouwde functies, behalve dat u de opgeslagen functie zelf moet definiëren. Als een opgeslagen functie eenmaal is gemaakt, kan deze net als elke andere functie in SQL-instructies worden gebruikt. De basissyntaxis voor het maken van een opgeslagen functie wordt hieronder weergegeven
CREATE FUNCTION sf_name ([parameter(s)])RETURNS data typeDETERMINISTICSTATEMENTS
HIER
- "CREATE FUNCTION sf_name ([parameter (s)])" is verplicht en vertelt de MySQL-server om een functie genaamd `sf_name 'te creëren met optionele parameters die tussen haakjes zijn gedefinieerd.
- "RETURNS-gegevenstype" is verplicht en specificeert het gegevenstype dat de functie moet retourneren.
- "DETERMINISTIC" betekent dat de functie dezelfde waarden retourneert als dezelfde argumenten eraan worden geleverd.
- "STATEMENTS" is de procedurele code die de functie uitvoert.
Laten we nu eens kijken naar een praktisch voorbeeld dat een ingebouwde functie implementeert. Stel dat we willen weten welke gehuurde films de inleverdatum zijn verstreken. We kunnen een opgeslagen functie maken die de retourdatum als parameter accepteert en deze vervolgens vergelijkt met de huidige datum in de MySQL-server. Als de huidige datum minder is dan de teruggekeerde filmdatum, dan geven we "Nee" terug, anders geven we "Ja" terug. Het onderstaande script helpt ons daarbij.
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|
Door het bovenstaande script uit te voeren, werd de opgeslagen functie `sf_past_movie_return_date` gemaakt.
Laten we nu onze opgeslagen functie testen.
SELECT `movie_id`,`membership_number`,`return_date`,CURDATE() ,sf_past_movie_return_date(`return_date`) FROM `movierentals`;
Het uitvoeren van het bovenstaande script in MySQL-workbench tegen de myflixdb geeft ons de volgende resultaten.
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 |
Door de gebruiker gedefinieerde functies
MySQL ondersteunt ook door de gebruiker gedefinieerde functies die MySQL uitbreiden. Door de gebruiker gedefinieerde functies zijn functies die u kunt maken met behulp van een programmeertaal zoals C, C ++ enz. En deze vervolgens kunt toevoegen aan de MySQL-server. Eenmaal toegevoegd, kunnen ze net als elke andere functie worden gebruikt.
Overzicht
- Functies stellen ons in staat om de mogelijkheden van MySQL te verbeteren.
- Functies retourneren altijd een waarde en kunnen optioneel parameters accepteren.
- Ingebouwde functies zijn functies die bij MySQL worden geleverd. Ze kunnen worden gecategoriseerd volgens de gegevenstypen waarop ze werken, dwz strings, datum en numerieke ingebouwde functies.
- Opgeslagen functies worden door de gebruiker gemaakt binnen de MySQL-server en kunnen worden gebruikt in SQL-instructies.
- Door de gebruiker gedefinieerde functies worden buiten MySQL gemaakt en kunnen in de MySQL-server worden opgenomen.