MySQL Funktioner: Sträng, Numerisk, Användardefinierad, Lagrad

Vad är funktioner?

MySQL kan göra mycket mer än att bara lagra och hämta data. Vi kan också utföra manipulationer på uppgifterna innan du hämtar eller sparar den. Det är där MySQL Funktioner kommer in. Funktioner är helt enkelt kodbitar som utför vissa operationer och sedan returnerar ett resultat. Vissa funktioner accepterar parametrar medan andra funktioner inte accepterar parametrar.

Låt oss kort titta på ett exempel på MySQL fungera. Som standard, MySQL sparar datumdatatyper i formatet "ÅÅÅÅ-MM-DD". Anta att vi har byggt en applikation och våra användare vill att datumet ska returneras i formatet "DD-MM-ÅÅÅÅ", kan vi använda MySQL inbyggd funktion DATE_FORMAT för att uppnå detta. DATE_FORMAT är en av de mest använda funktionerna i MySQL. Vi kommer att titta på det mer detaljerat när vi utvecklar lektionen.

Varför använda funktioner?

Varför använda funktioner

Baserat på exemplet i inledningen kan personer med erfarenhet av datorprogrammering tänka "Varför bry sig MySQL Funktioner? Samma effekt kan uppnås med skript-/programmeringsspråk?” Det är sant att vi kan uppnå det genom att skriva några procedurer/funktioner i applikationsprogrammet.

För att återgå till vårt DATE-exempel i introduktionen, för att våra användare ska få data i önskat format, måste affärslagret göra nödvändig bearbetning.

Detta blir ett problem när applikationen måste integreras med andra system. När vi använder MySQL funktioner som DATE_FORMAT, då kan vi ha den funktionen inbäddad i databasen och alla program som behöver data får den i det format som krävs. Detta minskar omarbete i affärslogiken och minskar datainkonsekvenser.

En annan anledning till varför vi bör överväga att använda MySQL funktioner är det faktum att det kan hjälpa till att minska nätverkstrafiken i klient/serverapplikationer. Business Layer behöver bara ringa till de lagrade funktionerna utan att behöva manipulera data. I genomsnitt kan användningen av funktioner bidra till att kraftigt förbättra systemets övergripande prestanda.

Typer av funktioner

Inbyggda funktioner

MySQL levereras med ett antal inbyggda funktioner. Inbyggda funktioner är helt enkelt funktioner som redan är implementerade i MySQL server. Dessa funktioner tillåter oss att utföra olika typer av manipulationer på data. De inbyggda funktionerna kan i princip kategoriseras i följande mest använda kategorier.

  • Strängar funktioner – arbeta på strängdatatyper
  • Numeriska funktioner – arbeta med numeriska datatyper
  • Datumfunktioner – arbeta med datumdatatyper
  • Aggregerade funktioner – arbeta på alla ovanstående datatyper och producera sammanfattade resultatuppsättningar.
  • Övriga funktioner - MySQL stöder även andra typer av inbyggda funktioner men vi kommer att begränsa vår lektion till de ovan nämnda funktionerna.

Låt oss nu titta på var och en av funktionerna som nämns ovan i detalj. Vi kommer att förklara de mest använda funktionerna med vår "Myflixdb".

Strängfunktioner

Vi har redan tittat på vad strängfunktioner gör. Vi kommer att titta på ett praktiskt exempel som använder dem. I vår filmtabell lagras filmtitlarna med kombinationer av små och stora bokstäver. Anta att vi vill få en frågelista som returnerar filmtitlarna med stora bokstäver. Vi kan använda funktionen "UCASE" för att göra det. Den tar en sträng som parameter och konverterar alla bokstäver till versaler. Skriptet som visas nedan visar användningen av "UCASE"-funktionen.

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

HÄR

  • UCASE(`titel`) är den inbyggda funktionen som tar titeln som en parameter och returnerar den med stora bokstäver med aliasnamnet `versaler_titel`.

Exekvera skriptet ovan i MySQL arbetsbänk mot Myflixdb ger oss följande resultat som visas nedan.

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öder ett antal strängfunktioner. För en komplett lista över alla inbyggda strängfunktioner, se denna länk http://dev.mysql.com/doc/refman/5.0/en/string-functions.html on MySQL webbsajt.

Numeriska funktioner

Som tidigare nämnts fungerar dessa funktioner på numeriska datatyper. Vi kan utföra matematiska beräkningar på numeriska data i SQL-satserna.

Aritematiska operatorer

MySQL stöder följande aritmatiska operatorer som kan användas för att utföra beräkningar i SQL-satserna.

Namn Description
DIV Heltal division
/ division
- Subtraktion
+ Dessutom
* Multiplikation
% eller MOD modul

Låt oss nu titta på exempel på var och en av ovanstående operatörer

Integer Division (DIV)

SELECT 23 DIV 6 ;

Att köra skriptet ovan ger oss följande resultat.

3

Divisionsoperatör (/)

Låt oss nu titta på divisionsoperatörsexemplet. Vi kommer att modifiera DIV-exemplet.

SELECT 23 / 6 ;

Att köra skriptet ovan ger oss följande resultat.

3.8333

Subtraktionsoperator (-)

Låt oss nu titta på subtraktionsoperatorexemplet. Vi kommer att använda samma värden som i de två föregående exemplen

SELECT 23 - 6 ;

Att köra skriptet ovan ger oss 17

Tilläggsoperator (+)

Låt oss nu titta på additionsoperatorexemplet. Vi kommer att ändra det föregående exemplet.

SELECT 23 + 6 ;

Att köra skriptet ovan ger oss 29

Multiplikationsoperator (*)

Låt oss nu titta på multiplikationsoperatorexemplet. Vi kommer att använda samma värden som i de tidigare exemplen.

SELECT 23 * 6 AS `multiplication_result`;

Att köra skriptet ovan ger oss följande resultat.

multiplikationsresultat
138

Modulo-operatör (-)

Modulo-operatorn delar N med M och ger oss resten. Låt oss nu titta på modulo-operatorexemplet. Vi kommer att använda samma värden som i de tidigare exemplen.

SELECT 23 % 6 ;

OR

SELECT 23 MOD 6 ;

Att köra ovanstående skript ger oss 5

Låt oss nu titta på några av de vanliga numeriska funktionerna i MySQL.

Golv – den här funktionen tar bort decimaler från ett tal och avrundar det till närmaste lägsta tal. Skriptet som visas nedan visar dess användning.

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

Att köra skriptet ovan ger oss följande resultat.

Golvresultat
3

Runda – denna funktion avrundar ett tal med decimaler till närmaste heltal. Skriptet som visas nedan visar dess användning.

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

Att köra skriptet ovan ger oss följande resultat.

Round_result
4

Rand – denna funktion används för att generera ett slumptal, dess värde ändras varje gång funktionen anropas. Skriptet som visas nedan visar dess användning.

SELECT RAND() AS `random_result`;

Lagrade funktioner

Lagrade funktioner är precis som inbyggda funktioner förutom att du måste definiera den lagrade funktionen själv. När en lagrad funktion väl har skapats kan den användas i SQL-satser precis som alla andra funktioner. Den grundläggande syntaxen för att skapa en lagrad funktion är som visas nedan

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

HÄR

  • "SKAPA FUNKTION sf_name ([parameter(s)]) " är obligatorisk och berättar MySQL server för att skapa en funktion som heter `sf_name' med valfria parametrar definierade inom parentes.
  • "RETURNERAR datatyp" är obligatoriskt och anger vilken datatyp som funktionen ska returnera.
  • "DETERMINISTISK" betyder att funktionen kommer att returnera samma värden om samma argument tillförs den.
  • "UTTALANDE" är den procedurkod som funktionen kör.

Låt oss nu titta på ett praktiskt exempel som implementerar en inbyggd funktion. Anta att vi vill veta vilka hyrfilmer som har passerat returdatumet. Vi kan skapa en lagrad funktion som accepterar returdatumet som parameter och sedan jämför det med det aktuella datumet i MySQL server. Om det aktuella datumet är mindre än återkomstdatumet för filmen returnerar vi "Nej" annars returnerar vi "Ja". Skriptet som visas nedan hjälper oss att uppnå 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|

Genom att köra ovanstående skript skapades den lagrade funktionen `sf_past_movie_return_date`.

Låt oss nu testa vår lagrade funktion.

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

Exekvera skriptet ovan i MySQL arbetsbänk mot myflixdb ger oss följande resultat.

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

Användardefinierade funktioner

MySQL stöder även användardefinierade funktioner som utökas MySQL. Användardefinierade funktioner är funktioner som du kan skapa med hjälp av ett programmeringsspråk som t.ex C, C++ etc. och lägg sedan till dem MySQL server. När de väl har lagts till kan de användas precis som alla andra funktioner.

Sammanfattning

  • Funktioner tillåter oss att förbättra kapaciteten hos MySQL.
  • Funktioner returnerar alltid ett värde och kan valfritt acceptera parametrar.
  • Inbyggda funktioner är funktioner som levereras med MySQL. De kan kategoriseras enligt de datatyper som de arbetar på, dvs. strängar, datum och numeriska inbyggda funktioner.
  • Lagrade funktioner skapas av användaren inom MySQL server och kan användas i SQL-satser.
  • Användardefinierade funktioner skapas utanför MySQL och kan ingå i MySQL servern.