Vad är funktioner?
MySQL kan göra mycket mer än att bara lagra och hämta data . Vi kan också utföra manipuleringar på data innan vi hämtar eller sparar den. Det är där MySQL-funktioner kommer in. Funktioner är helt enkelt kodbitar som utför vissa åtgärder 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-funktion. Som standard sparar MySQL datumdatatyper i formatet "ÅÅÅÅ-MM-DD". Antag att vi har byggt en applikation och våra användare vill att datumet ska returneras i formatet "DD-MM-ÅÅÅÅ", vi kan 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 mer detaljerat på det när vi läser ut lektionen.
Varför använda funktioner?
Baserat på exemplet som ges i inledningen kan personer med erfarenhet av datorprogrammering tänka "Varför bry MySQL-funktioner? Samma effekt kan uppnås med skripts / programmeringsspråk?" Det är sant att vi kan uppnå det genom att skriva några procedurer / funktioner i applikationsprogrammet.
För att komma tillbaka till vårt DATE-exempel i inledningen, för att våra användare ska få data i önskat format, måste affärslaget 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 kan vi ha den funktionaliteten inbäddad i databasen och alla applikationer som behöver data får den i önskat format. Detta minskar omarbetet i affärslogiken och minskar datainkonsekvenser.
En annan anledning till att 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 förbättra den totala systemprestandan avsevärt.
Typer av funktioner
Inbyggda funktioner
MySQL levereras med ett antal inbyggda funktioner. Inbyggda funktioner är helt enkelt funktioner som redan är implementerade i MySQL-servern. Dessa funktioner gör det möjligt för oss att utföra olika typer av manipulationer av data. De inbyggda funktionerna kan i grunden kategoriseras i följande mest använda kategorier.
- Strängfunktioner - fungerar på strängdatatyper
- Numeriska funktioner - fungerar på numeriska datatyper
- Datumfunktioner - använd datumdatatyper
- Aggregerade funktioner - hantera alla ovanstående datatyper och skapa sammanfattade resultatuppsättningar.
- Andra funktioner - MySQL stöder också andra typer av inbyggda funktioner men vi kommer att begränsa vår lektion till ovan nämnda funktioner.
Låt oss nu titta på var och en av de funktioner 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 versaler. Vi kan använda "UCASE" -funktionen för att göra det. Det tar en sträng som parameter och konverterar alla bokstäver till versaler. Skriptet nedan visar användningen av "UCASE" -funktionen.
SELECT `movie_id`,`title`, UCASE(`title`) FROM `movies`;
HÄR
- UCASE (`title`) är den inbyggda funktionen som tar titeln som en parameter och returnerar den med versaler med aliasnamnet` upper_case_title`.
Att utföra ovanstående skript i MySQL-arbetsbänken 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 fullständig lista över alla inbyggda strängfunktioner, hänvisa till den här länken http://dev.mysql.com/doc/refman/5.0/en/string-functions.html på MySQL-webbplatsen.
Numeriska funktioner
Som tidigare nämnts fungerar dessa funktioner på numeriska datatyper. Vi kan utföra matematiska beräkningar på numeriska data i SQL-uttalandena.
Aritematiska operatörer
MySQL stöder följande aritmatiska operatorer som kan användas för att utföra beräkningar i SQL-satserna.
namn |
Beskrivning |
---|---|
DIV |
Integer division |
/ |
Division |
- |
Subtraktion |
+ |
Tillägg |
* |
Multiplikation |
% eller MOD |
Modulus |
Låt oss nu titta på exempel på var och en av ovanstående operatörer
Integer Division (DIV)
SELECT 23 DIV 6 ;
Att utföra ovanstående skript ger oss följande resultat.
3
Division operatör (/)
Låt oss nu titta på divisionsoperatörsexemplet. Vi kommer att ändra DIV-exemplet.
SELECT 23 / 6 ;
Att utföra ovanstående skript ger oss följande resultat.
3,8333
Subtraktionsoperatör (-)
Låt oss nu titta på subtraktionsoperatörsexemplet. Vi kommer att använda samma värden som i de två föregående exemplen
SELECT 23 - 6 ;
Att utföra ovanstående skript ger oss 17
Tilläggsoperatör (+)
Låt oss nu titta på tilläggsoperatörsexemplet. Vi kommer att ändra det föregående exemplet.
SELECT 23 + 6 ;
Att utföra ovanstående skript ger oss 29
Multiplikationsoperator (*)
Låt oss nu titta på exemplet med multiplikationsoperatören. Vi kommer att använda samma värden som i föregående exempel.
SELECT 23 * 6 AS `multiplication_result`;
Att utföra ovanstående skript ger oss följande resultat.
multiplication_result |
138 |
Moduloperatör (-)
Moduloperatören delar N med M och ger oss resten. Låt oss nu titta på modulo-operatörsexemplet. Vi kommer att använda samma värden som i föregående exempel.
SELECT 23 % 6 ;
ELLER
SELECT 23 MOD 6 ;
Att utföra ovanstående skript ger oss 5
Låt oss nu titta på några av de vanliga numeriska funktionerna i MySQL.
Golv - denna funktion tar bort decimaler från ett nummer och avrundar det till närmaste lägsta nummer. Skriptet som visas nedan visar dess användning.
SELECT FLOOR(23 / 6) AS `floor_result`;
Att utföra ovanstående skript ger oss följande resultat.
Golvresultat |
3 |
Round - 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 utföra ovanstående skript ger oss följande resultat.
Round_result |
4 |
Rand - den här funktionen används för att generera ett slumptal, dess värde ändras varje gång som 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 själv måste definiera den lagrade funktionen. När en lagrad funktion har skapats kan den användas i SQL-uttalanden 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 typeDETERMINISTICSTATEMENTS
HÄR
- "CREATE FUNCTION sf_name ([parameter (s)])" är obligatoriskt och ber MySQL-servern att skapa en funktion med namnet "sf_name" med valfria parametrar definierade inom parentes.
- "RETURNS datatyp" är obligatoriskt och anger vilken datatyp som funktionen ska returnera.
- "DETERMINISTIC" betyder att funktionen returnerar samma värden om samma argument tillförs den.
- "UTTALANDEN" är den procedurkod som funktionen utför.
Låt oss nu titta på ett praktiskt exempel som implementerar en inbyggd funktion. Antag att vi vill veta vilka hyrda filmer som passerar returdatumet. Vi kan skapa en lagrad funktion som accepterar returdatumet som parameter och sedan jämför det med det aktuella datumet i MySQL-servern. Om det aktuella datumet är mindre än returfilmdatumet 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)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|
Genom att utfö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`;
Att köra ovanstående skript i MySQL-arbetsbänken 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 också användardefinierade funktioner som utökar MySQL. Användardefinierade funktioner är funktioner som du kan skapa med ett programmeringsspråk som C, C ++ etc. och sedan lägga till dem på MySQL-servern. När de väl har lagts till kan de användas precis som alla andra funktioner.
Sammanfattning
- Funktioner gör det möjligt för oss att förbättra funktionerna i MySQL.
- Funktioner returnerar alltid ett värde och kan valfritt acceptera parametrar.
- Inbyggda funktioner är funktioner som levereras med MySQL. De kan kategoriseras efter de datatyper som de använder på dvs strängar, datum och numeriska inbyggda funktioner.
- Lagrade funktioner skapas av användaren inom MySQL-servern och kan användas i SQL-uttalanden.
- Användardefinierade funktioner skapas utanför MySQL och kan integreras i MySQL-servern.