Jakie są funkcje?
MySQL potrafi znacznie więcej niż tylko przechowywanie i odzyskiwanie danych . Możemy również wykonać manipulacje na danych przed ich odzyskaniem lub zapisaniem. Tutaj właśnie wkraczają funkcje MySQL. Funkcje to po prostu fragmenty kodu, które wykonują pewne operacje, a następnie zwracają wynik. Niektóre funkcje akceptują parametry, podczas gdy inne nie akceptują parametrów.
Przyjrzyjmy się pokrótce przykładowi funkcji MySQL. Domyślnie MySQL zapisuje typy danych daty w formacie „RRRR-MM-DD”. Załóżmy, że stworzyliśmy aplikację, a nasi użytkownicy chcą, aby data była zwracana w formacie „DD-MM-RRRR”. Aby to osiągnąć, możemy użyć wbudowanej funkcji MySQL DATE_FORMAT. DATE_FORMAT to jedna z najczęściej używanych funkcji w MySQL. Przyjrzymy się temu bardziej szczegółowo w trakcie rozwijania lekcji.
Dlaczego warto korzystać z funkcji?
Opierając się na przykładzie podanym we wstępie, osoby z doświadczeniem w programowaniu komputerów mogą pomyśleć: „Po co zawracać sobie głowę funkcjami MySQL? Ten sam efekt można osiągnąć za pomocą języka skryptowego / programowania?”. To prawda, że możemy to osiągnąć, pisząc pewne procedury / funkcje w programie użytkowym.
Wracając do naszego przykładu DATA we wstępie, aby nasi użytkownicy otrzymali dane w pożądanym formacie, warstwa biznesowa będzie musiała wykonać niezbędne przetwarzanie.
Staje się to problemem, gdy aplikacja musi się integrować z innymi systemami. Kiedy używamy funkcji MySQL, takich jak DATE_FORMAT, możemy mieć tę funkcjonalność osadzoną w bazie danych, a każda aplikacja, która potrzebuje danych, pobiera je w wymaganym formacie. To zmniejsza ponowną pracę w logice biznesowej i zmniejszenia niespójności danych.
Innym powodem, dla którego powinniśmy rozważyć użycie funkcji MySQL, jest fakt, że może pomóc zmniejszyć ruch sieciowy w aplikacjach klient / serwer . Warstwa biznesowa będzie musiała jedynie wywołać zapisane funkcje bez konieczności manipulowania danymi. Średnio użycie funkcji może znacznie poprawić ogólną wydajność systemu.
Rodzaje funkcji
Wbudowane funkcje
MySQL jest dostarczany z wieloma wbudowanymi funkcjami. Wbudowane funkcje to po prostu funkcje już zaimplementowane na serwerze MySQL. Funkcje te pozwalają nam wykonywać różnego rodzaju manipulacje na danych. Wbudowane funkcje można zasadniczo podzielić na następujące najczęściej używane kategorie.
- Funkcje łańcuchowe - działają na typach danych typu string
- Funkcje numeryczne - działają na liczbowych typach danych
- Funkcje daty - działają na typach danych daty
- Funkcje agregujące - działają na wszystkich powyższych typach danych i generują podsumowane zestawy wyników.
- Inne funkcje - MySQL obsługuje również inne typy wbudowanych funkcji, ale ograniczymy naszą lekcję tylko do wyżej wymienionych funkcji.
Przyjrzyjmy się teraz szczegółowo każdej z wyżej wymienionych funkcji. Najczęściej używane funkcje wyjaśnimy za pomocą naszego „Myflixdb”.
Funkcje łańcuchowe
Sprawdziliśmy już, co robią funkcje tekstowe. Przyjrzymy się praktycznemu przykładowi, który je wykorzystuje. W naszej tabeli filmów tytuły filmów są przechowywane przy użyciu kombinacji małych i dużych liter. Załóżmy, że chcemy uzyskać listę zapytań, która zwraca tytuły filmów wielkimi literami. W tym celu możemy użyć funkcji „UCASE”. Pobiera łańcuch jako parametr i konwertuje wszystkie litery na duże. Poniższy skrypt demonstruje użycie funkcji „UCASE”.
SELECT `movie_id`,`title`, UCASE(`title`) FROM `movies`;
TUTAJ
- UCASE (`tytuł`) to wbudowana funkcja, która przyjmuje tytuł jako parametr i zwraca go wielkimi literami z aliasem` tytuł_przedmiotu_głębnego`.
Wykonanie powyższego skryptu w środowisku MySQL na Myflixdb daje nam następujące wyniki pokazane poniżej.
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 obsługuje wiele funkcji tekstowych. Pełną listę wszystkich wbudowanych funkcji ciągów można znaleźć pod tym linkiem http://dev.mysql.com/doc/refman/5.0/en/string-functions.html w witrynie MySQL.
Funkcje numeryczne
Jak wspomniano wcześniej, funkcje te działają na liczbowych typach danych. Możemy wykonywać obliczenia matematyczne na danych liczbowych w instrukcjach SQL.
Operatory matematyczne
MySQL obsługuje następujące operatory arytmatyczne, których można używać do wykonywania obliczeń w instrukcjach SQL.
Nazwa |
Opis |
---|---|
DIV |
Dzielenie całkowite |
/ |
Podział |
- |
Odejmowanie |
+ |
Dodanie |
* |
Mnożenie |
% lub MOD |
Moduł |
Spójrzmy teraz na przykłady każdego z powyższych operatorów
Dzielenie całkowite (DIV)
SELECT 23 DIV 6 ;
Wykonanie powyższego skryptu daje nam następujące wyniki.
3
Operator dzielenia (/)
Spójrzmy teraz na przykład operatora dzielenia. Zmodyfikujemy przykład DIV.
SELECT 23 / 6 ;
Wykonanie powyższego skryptu daje nam następujące wyniki.
3.8333
Operator odejmowania (-)
Spójrzmy teraz na przykład operatora odejmowania. Użyjemy tych samych wartości, co w poprzednich dwóch przykładach
SELECT 23 - 6 ;
Wykonanie powyższego skryptu daje nam 17
Operator dodawania (+)
Spójrzmy teraz na przykład operatora dodawania. Zmodyfikujemy poprzedni przykład.
SELECT 23 + 6 ;
Wykonanie powyższego skryptu daje nam 29
Operator mnożenia (*)
Spójrzmy teraz na przykład operatora mnożenia. Użyjemy tych samych wartości, co w poprzednich przykładach.
SELECT 23 * 6 AS `multiplication_result`;
Wykonanie powyższego skryptu daje nam następujące wyniki.
multiplication_result |
138 |
Operator modulo (-)
Operator modulo dzieli N przez M i daje nam resztę. Spójrzmy teraz na przykład operatora modulo. Użyjemy tych samych wartości, co w poprzednich przykładach.
SELECT 23 % 6 ;
LUB
SELECT 23 MOD 6 ;
Wykonanie powyższego skryptu daje nam 5
Przyjrzyjmy się teraz niektórym typowym funkcjom numerycznym w MySQL.
Podłoga - ta funkcja usuwa miejsca dziesiętne z liczby i zaokrągla ją do najbliższej najniższej liczby. Poniższy skrypt demonstruje jego użycie.
SELECT FLOOR(23 / 6) AS `floor_result`;
Wykonanie powyższego skryptu daje nam następujące wyniki.
Wynik_piętra |
3 |
Round - ta funkcja zaokrągla liczbę z miejscami dziesiętnymi do najbliższej liczby całkowitej. Poniższy skrypt demonstruje jego użycie.
SELECT ROUND(23 / 6) AS `round_result`;
Wykonanie powyższego skryptu daje nam następujące wyniki.
Round_result |
4 |
Rand - funkcja służy do generowania liczby losowej, której wartość zmienia się przy każdym wywołaniu funkcji. Poniższy skrypt demonstruje jego użycie.
SELECT RAND() AS `random_result`;
Zapisane funkcje
Funkcje przechowywane są takie same jak funkcje wbudowane, z tą różnicą, że musisz samodzielnie zdefiniować funkcję przechowywaną. Po utworzeniu funkcji przechowywanej można jej używać w instrukcjach SQL, tak jak każdej innej funkcji. Podstawowa składnia tworzenia przechowywanej funkcji jest pokazana poniżej
CREATE FUNCTION sf_name ([parameter(s)])RETURNS data typeDETERMINISTICSTATEMENTS
TUTAJ
- „UTWÓRZ FUNKCJĘ sf_name ([parametry (y)])” jest obowiązkowe i mówi serwerowi MySQL, aby utworzył funkcję o nazwie „sf_name” z opcjonalnymi parametrami zdefiniowanymi w nawiasach.
- „Typ danych RETURNS” jest obowiązkowy i określa typ danych, które funkcja powinna zwrócić.
- „DETERMINISTYCZNA” oznacza, że funkcja zwróci te same wartości, jeśli zostaną do niej dostarczone te same argumenty.
- „STATEMENTY” to kod proceduralny wykonywany przez funkcję.
Spójrzmy teraz na praktyczny przykład implementujący wbudowaną funkcję. Załóżmy, że chcemy wiedzieć, które wypożyczone filmy minęły. Możemy stworzyć zapisaną funkcję, która jako parametr przyjmie datę powrotu, a następnie porówna ją z aktualną datą na serwerze MySQL. Jeśli aktualna data jest wcześniejsza niż data powrotu filmu, zwracamy „Nie”, w przeciwnym razie zwracamy „Tak”. Poniższy skrypt pomaga nam to osiągnąć.
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|
Wykonanie powyższego skryptu utworzyło zapisaną funkcję `sf_past_movie_return_date`.
Przetestujmy teraz naszą zapisaną funkcję.
SELECT `movie_id`,`membership_number`,`return_date`,CURDATE() ,sf_past_movie_return_date(`return_date`) FROM `movierentals`;
Wykonanie powyższego skryptu w środowisku roboczym MySQL na myflixdb daje następujące wyniki.
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 |
Funkcje zdefiniowane przez użytkownika
MySQL obsługuje również funkcje zdefiniowane przez użytkownika, które rozszerzają MySQL. Funkcje zdefiniowane przez użytkownika to funkcje, które można utworzyć za pomocą języka programowania, takiego jak C, C ++ itp., A następnie dodać je do serwera MySQL. Po dodaniu można ich używać tak jak każdej innej funkcji.
Podsumowanie
- Funkcje pozwalają nam rozszerzyć możliwości MySQL.
- Funkcje zawsze zwracają wartość i mogą opcjonalnie akceptować parametry.
- Funkcje wbudowane to funkcje dostarczane z MySQL. Można je podzielić na kategorie według typów danych, na których operują, tj. Ciągi znaków, datę i wbudowane funkcje numeryczne.
- Funkcje przechowywane są tworzone przez użytkownika na serwerze MySQL i mogą być używane w instrukcjach SQL.
- Funkcje zdefiniowane przez użytkownika są tworzone poza MySQL i mogą być włączone do serwera MySQL.