MySQL Functies: String, Numeriek, Door gebruiker gedefinieerd, Opgeslagen

Wat zijn functies?

MySQL kan veel meer dan alleen gegevens opslaan en ophalen. We kunnen ook manipulaties uitvoeren op de gegevens voordat u het ophaalt of opslaat. Dat is waar MySQL Functies komen binnen. Functies zijn simpelweg stukjes code die een aantal 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 MySQL functie. Standaard, MySQL slaat datumgegevenstypen 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 gebruiken MySQL ingebouwde functie DATE_FORMAT om dit te bereiken. DATE_FORMAT is een van de meest gebruikte functies in MySQLWe zullen hier dieper op ingaan naarmate we de les verder uitwerken.

Waarom functies gebruiken?

Waarom functies gebruiken

Gebaseerd op het voorbeeld dat in de inleiding wordt gegeven, denken mensen met ervaring in computerprogrammering misschien: “Waarom moeite doen? MySQL Functies? Hetzelfde effect kan worden bereikt met script-/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: om onze gebruikers de gegevens in het gewenste formaat te laten krijgen, zal de bedrijfslaag de noodzakelijke verwerking moeten uitvoeren.

Dit wordt een probleem wanneer de applicatie moet integreren met andere systemen. Wanneer wij gebruiken MySQL functies zoals de DATE_FORMAT, dan kunnen we die functionaliteit in de database laten insluiten en elke toepassing die de gegevens nodig heeft, krijgt deze in het vereiste formaat. Dit vermindert herwerk in de bedrijfslogica en vermindert data-inconsistenties.

Nog een reden waarom we het gebruik zouden moeten overwegen MySQL functies is het feit dat het kan helpen het netwerkverkeer in client/server-applicaties te verminderen. Business Layer hoeft alleen maar de opgeslagen functies aan te roepen zonder dat de gegevens hoeven te 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 eenvoudigweg functies die al zijn geïmplementeerd in de MySQL server. Deze functies stellen ons in staat om verschillende soorten manipulaties op de data uit te voeren. De ingebouwde functies kunnen in principe worden gecategoriseerd in de volgende meest gebruikte categorieën.

  • Strings-functies – werken op string-gegevenstypen
  • Numerieke functies – werken op numerieke gegevenstypen
  • Datumfuncties – werken op datumgegevenstypen
  • 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 alleen 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 waarin ze worden gebruikt. In onze filmtabel worden de filmtitels opgeslagen met combinaties van kleine en hoofdletters. Stel dat we een zoeklijst willen hebben die de filmtitels in hoofdletters retourneert. We kunnen hiervoor de functie "UCASE" gebruiken. 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 in hoofdletters retourneert met de aliasnaam `upper_case_title`.

Voer het bovenstaande script uit in MySQL workbench vergeleken met Myflixdb geeft ons de volgende resultaten, zoals hieronder 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. Raadpleeg deze link voor een volledige lijst van alle ingebouwde stringfuncties http://dev.mysql.com/doc/refman/5.0/en/string-functions.html on MySQL website.

Numerieke functies

Zoals eerder vermeld, werken deze functies op numerieke gegevenstypen. We kunnen wiskundige berekeningen uitvoeren op numerieke gegevens in de SQL-statements.

Rekenkundige operatoren

MySQL ondersteunt de volgende rekenkundige operatoren die kunnen worden gebruikt om berekeningen uit te voeren in de SQL-instructies.

Naam Beschrijving
DIV Integer indeling
/ Divisie
- Aftrekking
+ Toevoeging
* Vermenigvuldiging
% of MOD modulus

Laten we nu eens kijken naar voorbeelden van elk van de bovenstaande operatoren

Deling van gehele getallen (DIV)

SELECT 23 DIV 6 ;

Als u bovenstaand script uitvoert, krijgt u de volgende resultaten.

3

Deeloperator (/)

Laten we nu eens kijken naar het voorbeeld van de delingsoperator. We zullen het DIV-voorbeeld aanpassen.

SELECT 23 / 6 ;

Als u bovenstaand script uitvoert, krijgt u de volgende resultaten.

3.8333

Aftrekoperator (-)

Laten we nu eens kijken naar het voorbeeld van de subtractie-operator. We gebruiken dezelfde waarden als in de vorige twee voorbeelden

SELECT 23 - 6 ;

Het uitvoeren van het bovenstaande script levert ons 17 op

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 levert ons 29 op

Vermenigvuldigingsoperator (*)

Laten we nu eens kijken naar het voorbeeld van de vermenigvuldigingsoperator. We gebruiken dezelfde waarden als in de vorige voorbeelden.

SELECT 23 * 6 AS `multiplication_result`;

Als u bovenstaand script uitvoert, krijgt u de volgende resultaten.

vermenigvuldiging_resultaat
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 gebruiken dezelfde waarden als in de vorige voorbeelden.

SELECT 23 % 6 ;

OR

SELECT 23 MOD 6 ;

Het uitvoeren van het bovenstaande script geeft ons 5

Laten we nu eens kijken naar enkele veelgebruikte numerieke functies in MySQL.

Vloer – deze functie verwijdert decimalen van een getal en rondt het af naar het dichtstbijzijnde laagste getal. Het onderstaande script demonstreert het gebruik ervan.

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

Als u bovenstaand script uitvoert, krijgt u de volgende resultaten.

Verdieping_resultaat
3

Ronde – deze functie rondt een getal af met decimalen naar het dichtstbijzijnde gehele getal. Het onderstaande script demonstreert het gebruik ervan.

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

Als u bovenstaand script uitvoert, krijgt u de volgende resultaten.

Rond_resultaat
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. Zodra een opgeslagen functie is gemaakt, kan deze net als elke andere functie in SQL-instructies worden gebruikt. De basissyntaxis voor het maken van een opgeslagen functie is zoals hieronder weergegeven

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

HIER

  • “CREËER FUNCTIE sf_name ([parameter(s)]) “ is verplicht en vertelt MySQL server om een ​​functie met de naam `sf_name' te maken met optionele parameters gedefinieerd tussen haakjes.
  • “RETOURS-gegevenstype” is verplicht en specificeert het gegevenstype dat de functie moet retourneren.
  • “DETERMINISTISCH” betekent dat de functie dezelfde waarden retourneert als er dezelfde argumenten aan worden gegeven.
  • “VERKLARINGEN” is de procedurecode 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 retourdatum hebben overschreden. We kunnen een opgeslagen functie maken die de retourdatum als parameter accepteert en deze vervolgens vergelijkt met de huidige datum in MySQL server. Als de huidige datum korter is dan de datum van de retourfilm, retourneren we 'Nee', anders retourneren we 'Ja'. Het onderstaande script helpt ons daarbij.

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|

Door het bovenstaande script uit te voeren, werd de opgeslagen functie `sf_past_movie_return_date` aangemaakt.

Laten we nu onze opgeslagen functie testen.

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

Voer het bovenstaande script uit in MySQL workbench vergeleken met 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 zich uitbreiden MySQL. Door de gebruiker gedefinieerde functies zijn functies die u kunt maken met behulp van een programmeertaal zoals C, C++ enz. en voeg ze vervolgens toe MySQL server. Eenmaal toegevoegd, kunnen ze net als elke andere functie worden gebruikt.

Samenvatting

  • Functies stellen ons in staat de mogelijkheden van te vergroten MySQL.
  • Functies retourneren altijd een waarde en kunnen optioneel parameters accepteren.
  • Ingebouwde functies zijn functies die worden meegeleverd MySQLZe kunnen worden gecategoriseerd op basis van de gegevenstypen waarop ze werken, bijvoorbeeld strings, datums en ingebouwde numerieke functies.
  • Opgeslagen functies worden door de gebruiker aangemaakt MySQL server en kan worden gebruikt in SQL-instructies.
  • Door de gebruiker gedefinieerde functies worden buiten gecreëerd MySQL en erin verwerkt kan worden MySQL server.