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?
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.