Τι είναι οι λειτουργίες;
Η MySQL μπορεί να κάνει πολύ περισσότερα από την απλή αποθήκευση και ανάκτηση δεδομένων . Μπορούμε επίσης να εκτελέσουμε χειρισμούς στα δεδομένα πριν τα ανακτήσουμε ή τα αποθηκεύσουμε. Εκεί μπαίνουν οι λειτουργίες MySQL. Οι συναρτήσεις είναι απλά κομμάτια κώδικα που εκτελούν ορισμένες λειτουργίες και στη συνέχεια επιστρέφουν ένα αποτέλεσμα. Ορισμένες λειτουργίες δέχονται παραμέτρους, ενώ άλλες λειτουργίες δεν δέχονται παραμέτρους.
Ας δούμε εν συντομία ένα παράδειγμα της λειτουργίας MySQL. Από προεπιλογή, η MySQL αποθηκεύει τύπους δεδομένων ημερομηνίας με τη μορφή "ΕΕΕΕ-ΜΜ-ΗΗ". Ας υποθέσουμε ότι έχουμε δημιουργήσει μια εφαρμογή και οι χρήστες μας θέλουν να επιστραφεί η ημερομηνία με τη μορφή "DD-MM-YYYY", μπορούμε να χρησιμοποιήσουμε την ενσωματωμένη συνάρτηση DATE_FORMAT MySQL για να το επιτύχουμε. Η DATE_FORMAT είναι μία από τις πιο χρησιμοποιούμενες συναρτήσεις στο MySQL. Θα το εξετάσουμε με περισσότερες λεπτομέρειες καθώς ξεδιπλώνουμε το μάθημα.
Γιατί να χρησιμοποιήσετε λειτουργίες;
Βάσει του παραδείγματος που δίνεται στην εισαγωγή, τα άτομα με εμπειρία στον προγραμματισμό υπολογιστών μπορεί να σκέφτονται "Γιατί ενοχλούν τις λειτουργίες MySQL; Το ίδιο αποτέλεσμα μπορεί να επιτευχθεί με τη γλώσσα scripting / προγραμματισμού;" Είναι αλήθεια ότι μπορούμε να το επιτύχουμε γράφοντας μερικές διαδικασίες / λειτουργία στο πρόγραμμα εφαρμογής.
Επιστρέφοντας στο παράδειγμά μας DATE στην εισαγωγή, για να λάβουν οι χρήστες τα δεδομένα στην επιθυμητή μορφή, το επιχειρησιακό επίπεδο θα πρέπει να κάνει την απαραίτητη επεξεργασία.
Αυτό γίνεται πρόβλημα όταν η εφαρμογή πρέπει να ενσωματωθεί σε άλλα συστήματα. Όταν χρησιμοποιούμε συναρτήσεις MySQL όπως το DATE_FORMAT, τότε μπορούμε να ενσωματώσουμε αυτήν τη λειτουργικότητα στη βάση δεδομένων και οποιαδήποτε εφαρμογή που χρειάζεται τα δεδομένα τη λαμβάνει στην απαιτούμενη μορφή. Αυτό μειώνει την εκ νέου εργασία στην επιχειρηματική λογική και μειώνει τις ασυνέπειες των δεδομένων.
Ένας άλλος λόγος για τον οποίο πρέπει να εξετάσουμε τη χρήση των λειτουργιών MySQL είναι το γεγονός ότι μπορεί να βοηθήσει στη μείωση της κυκλοφορίας δικτύου σε εφαρμογές πελάτη / διακομιστή . Το Business Layer θα χρειαστεί μόνο να πραγματοποιήσει κλήση στις αποθηκευμένες λειτουργίες χωρίς να χρειάζεται να χειριστεί δεδομένα. Κατά μέσο όρο, η χρήση συναρτήσεων μπορεί να βοηθήσει σημαντικά στη βελτίωση της συνολικής απόδοσης του συστήματος.
Τύποι συναρτήσεων
Ενσωματωμένες λειτουργίες
Το MySQL συνοδεύεται από έναν αριθμό ενσωματωμένων συναρτήσεων. Ενσωματωμένες συναρτήσεις είναι απλά λειτουργίες που έχουν ήδη υλοποιηθεί στο διακομιστή MySQL. Αυτές οι λειτουργίες μας επιτρέπουν να εκτελούμε διαφορετικούς τύπους χειρισμών στα δεδομένα. Οι ενσωματωμένες συναρτήσεις μπορούν βασικά να κατηγοριοποιηθούν στις ακόλουθες πιο χρησιμοποιούμενες κατηγορίες.
- Λειτουργίες συμβολοσειρών - λειτουργούν σε τύπους δεδομένων συμβολοσειρών
- Αριθμητικές συναρτήσεις - λειτουργούν σε αριθμητικούς τύπους δεδομένων
- Λειτουργίες ημερομηνίας - λειτουργούν σε τύπους δεδομένων ημερομηνίας
- Συγκεντρωτικές λειτουργίες - λειτουργούν σε όλους τους παραπάνω τύπους δεδομένων και παράγουν συνοπτικά σύνολα αποτελεσμάτων.
- Άλλες λειτουργίες - Η MySQL υποστηρίζει επίσης άλλους τύπους ενσωματωμένων συναρτήσεων, αλλά θα περιορίσουμε το μάθημά μας μόνο στις παραπάνω λειτουργίες.
Ας δούμε τώρα καθεμία από τις λειτουργίες που αναφέρονται παραπάνω λεπτομερώς. Θα εξηγήσουμε τις πιο χρησιμοποιούμενες λειτουργίες χρησιμοποιώντας το "Myflixdb".
Συναρτήσεις συμβολοσειράς
Εξετάσαμε ήδη τις λειτουργίες των συμβολοσειρών. Θα δούμε ένα πρακτικό παράδειγμα που τα χρησιμοποιεί. Στον πίνακα ταινιών μας, οι τίτλοι των ταινιών αποθηκεύονται χρησιμοποιώντας συνδυασμούς πεζών και κεφαλαίων γραμμάτων. Ας υποθέσουμε ότι θέλουμε να λάβουμε μια λίστα ερωτημάτων που επιστρέφει τους τίτλους της ταινίας με κεφαλαία γράμματα. Μπορούμε να χρησιμοποιήσουμε τη λειτουργία "UCASE" για να το κάνουμε αυτό. Παίρνει μια συμβολοσειρά ως παράμετρο και μετατρέπει όλα τα γράμματα σε κεφαλαία. Το σενάριο που φαίνεται παρακάτω δείχνει τη χρήση της συνάρτησης "UCASE".
SELECT `movie_id`,`title`, UCASE(`title`) FROM `movies`;
ΕΔΩ
- Το UCASE («title») είναι η ενσωματωμένη συνάρτηση που παίρνει τον τίτλο ως παράμετρο και τον επιστρέφει με κεφαλαία γράμματα με το ψευδώνυμο «upper_case_title».
Η εκτέλεση του παραπάνω σεναρίου στον πάγκο εργασίας MySQL έναντι του Myflixdb μας δίνει τα ακόλουθα αποτελέσματα που εμφανίζονται παρακάτω.
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 υποστηρίζει μια σειρά από συναρτήσεις συμβολοσειράς. Για μια πλήρη λίστα όλων των ενσωματωμένων συναρτήσεων συμβολοσειράς, διαβάστε αυτόν τον σύνδεσμο http://dev.mysql.com/doc/refman/5.0/en/string-functions.html στον ιστότοπο της MySQL.
Αριθμητικές συναρτήσεις
Όπως αναφέρθηκε προηγουμένως, αυτές οι λειτουργίες λειτουργούν σε αριθμητικούς τύπους δεδομένων. Μπορούμε να κάνουμε μαθηματικούς υπολογισμούς σε αριθμητικά δεδομένα στις δηλώσεις SQL.
Αριθμητικοί τελεστές
Η MySQL υποστηρίζει τους ακόλουθους αριθμητικούς τελεστές που μπορούν να χρησιμοποιηθούν για την εκτέλεση υπολογισμών στις δηλώσεις SQL.
Ονομα |
Περιγραφή |
---|---|
DIV |
Ακέραιος διαχωρισμός |
/ |
Διαίρεση |
- |
Αφαίρεση |
+ |
Πρόσθεση |
* |
Πολλαπλασιασμός |
% ή MOD |
Μέτρο |
Ας δούμε τώρα παραδείγματα καθενός από τους παραπάνω χειριστές
Ακέραιος τομέας (DIV)
SELECT 23 DIV 6 ;
Η εκτέλεση του παραπάνω σεναρίου μας δίνει τα ακόλουθα αποτελέσματα.
3
Διαχειριστής τμήματος (/)
Ας δούμε τώρα το παράδειγμα χειριστή διαίρεσης. Θα τροποποιήσουμε το παράδειγμα DIV.
SELECT 23 / 6 ;
Η εκτέλεση του παραπάνω σεναρίου μας δίνει τα ακόλουθα αποτελέσματα.
3.8333
Τελεστής αφαίρεσης (-)
Ας δούμε τώρα το παράδειγμα του τελεστή αφαίρεσης. Θα χρησιμοποιήσουμε τις ίδιες τιμές με τα δύο προηγούμενα παραδείγματα
SELECT 23 - 6 ;
Η εκτέλεση του παραπάνω σεναρίου μας δίνει 17
Τελεστής προσθήκης (+)
Ας δούμε τώρα το παράδειγμα χειριστή προσθήκης. Θα τροποποιήσουμε το προηγούμενο παράδειγμα.
SELECT 23 + 6 ;
Η εκτέλεση του παραπάνω σεναρίου μας δίνει 29
Τελεστής πολλαπλασιασμού (*)
Ας δούμε τώρα το παράδειγμα του τελεστή πολλαπλασιασμού. Θα χρησιμοποιήσουμε τις ίδιες τιμές με τα προηγούμενα παραδείγματα.
SELECT 23 * 6 AS `multiplication_result`;
Η εκτέλεση του παραπάνω σεναρίου μας δίνει τα ακόλουθα αποτελέσματα.
πολλαπλασιασμός_αποτέλεσμα |
138 |
Τελεστής Modulo (-)
Ο χειριστής modulo διαιρεί το Ν με το Μ και μας δίνει το υπόλοιπο. Ας δούμε τώρα το παράδειγμα χειριστή modulo. Θα χρησιμοποιήσουμε τις ίδιες τιμές με τα προηγούμενα παραδείγματα.
SELECT 23 % 6 ;
Ή
SELECT 23 MOD 6 ;
Η εκτέλεση του παραπάνω σεναρίου μας δίνει 5
Ας δούμε τώρα μερικές από τις κοινές αριθμητικές συναρτήσεις στη MySQL.
Όροφος - αυτή η λειτουργία αφαιρεί τα δεκαδικά ψηφία από έναν αριθμό και στρογγυλοποιεί στον πλησιέστερο χαμηλότερο αριθμό. Το σενάριο που φαίνεται παρακάτω δείχνει τη χρήση του.
SELECT FLOOR(23 / 6) AS `floor_result`;
Η εκτέλεση του παραπάνω σεναρίου μας δίνει τα ακόλουθα αποτελέσματα.
Αποτέλεσμα_αιτίας |
3 |
Γύρος - αυτή η συνάρτηση στρογγυλοποιεί έναν αριθμό με δεκαδικά ψηφία στον πλησιέστερο ακέραιο αριθμό. Το σενάριο που φαίνεται παρακάτω δείχνει τη χρήση του.
SELECT ROUND(23 / 6) AS `round_result`;
Η εκτέλεση του παραπάνω σεναρίου μας δίνει τα ακόλουθα αποτελέσματα.
Αποτέλεσμα γύρου |
4 |
Rand - αυτή η συνάρτηση χρησιμοποιείται για τη δημιουργία ενός τυχαίου αριθμού, η τιμή της αλλάζει κάθε φορά που καλείται η συνάρτηση. Το σενάριο που φαίνεται παρακάτω δείχνει τη χρήση του.
SELECT RAND() AS `random_result`;
Αποθηκευμένες λειτουργίες
Οι αποθηκευμένες λειτουργίες είναι ακριβώς όπως οι ενσωματωμένες συναρτήσεις εκτός από το ότι πρέπει να ορίσετε μόνοι σας την αποθηκευμένη λειτουργία. Μόλις δημιουργηθεί μια αποθηκευμένη συνάρτηση, μπορεί να χρησιμοποιηθεί σε δηλώσεις SQL όπως κάθε άλλη συνάρτηση. Η βασική σύνταξη για τη δημιουργία μιας αποθηκευμένης λειτουργίας είναι όπως φαίνεται παρακάτω
CREATE FUNCTION sf_name ([parameter(s)])RETURNS data typeDETERMINISTICSTATEMENTS
ΕΔΩ
- "CREATE FUNCTION sf_name ([parameter (s)])" είναι υποχρεωτικό και λέει στον διακομιστή MySQL να δημιουργήσει μια συνάρτηση με το όνομα "sf_name" με προαιρετικές παραμέτρους που ορίζονται στην παρένθεση.
- Ο "τύπος δεδομένων ΕΠΙΣΤΡΟΦΗΣ" είναι υποχρεωτικός και καθορίζει τον τύπο δεδομένων που πρέπει να επιστρέψει η συνάρτηση.
- "DETERMINISTIC" σημαίνει ότι η συνάρτηση θα επιστρέψει τις ίδιες τιμές εάν της παρέχονται τα ίδια ορίσματα.
- Το "STATEMENTS" είναι ο διαδικαστικός κώδικας που εκτελεί η συνάρτηση.
Ας δούμε τώρα ένα πρακτικό παράδειγμα που εφαρμόζει μια ενσωματωμένη λειτουργία. Ας υποθέσουμε ότι θέλουμε να γνωρίζουμε ποιες ενοικιαζόμενες ταινίες έχουν περάσει από την ημερομηνία επιστροφής. Μπορούμε να δημιουργήσουμε μια αποθηκευμένη συνάρτηση που αποδέχεται την ημερομηνία επιστροφής ως παράμετρο και στη συνέχεια τη συγκρίνει με την τρέχουσα ημερομηνία στο διακομιστή MySQL. Εάν η τρέχουσα ημερομηνία είναι μικρότερη από την ημερομηνία επιστροφής της ταινίας, τότε επιστρέφουμε "Όχι" αλλιώς επιστρέφουμε "Ναι". Το σενάριο που φαίνεται παρακάτω μας βοηθά να το επιτύχουμε.
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|
Η εκτέλεση του παραπάνω σεναρίου δημιούργησε την αποθηκευμένη συνάρτηση «sf_past_movie_return_date».
Ας δοκιμάσουμε τώρα την αποθηκευμένη λειτουργία μας.
SELECT `movie_id`,`membership_number`,`return_date`,CURDATE() ,sf_past_movie_return_date(`return_date`) FROM `movierentals`;
Η εκτέλεση του παραπάνω σεναρίου στον πάγκο εργασίας MySQL έναντι του myflixdb μας δίνει τα ακόλουθα αποτελέσματα.
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 |
Λειτουργίες που καθορίζονται από το χρήστη
Η MySQL υποστηρίζει επίσης λειτουργίες καθορισμένες από τον χρήστη που επεκτείνουν τη MySQL. Οι λειτουργίες που καθορίζονται από τον χρήστη είναι συναρτήσεις που μπορείτε να δημιουργήσετε χρησιμοποιώντας μια γλώσσα προγραμματισμού όπως C, C ++ κ.λπ. και στη συνέχεια να τις προσθέσετε στο διακομιστή MySQL. Μόλις προστεθούν, μπορούν να χρησιμοποιηθούν όπως κάθε άλλη λειτουργία.
Περίληψη
- Οι λειτουργίες μας επιτρέπουν να βελτιώσουμε τις δυνατότητες της MySQL.
- Οι συναρτήσεις επιστρέφουν πάντα μια τιμή και μπορούν προαιρετικά να δέχονται παραμέτρους.
- Οι ενσωματωμένες συναρτήσεις είναι συναρτήσεις που αποστέλλονται με MySQL. Μπορούν να κατηγοριοποιηθούν σύμφωνα με τους τύπους δεδομένων στους οποίους λειτουργούν, δηλαδή συμβολοσειρές, ημερομηνία και αριθμητικές ενσωματωμένες συναρτήσεις.
- Οι αποθηκευμένες συναρτήσεις δημιουργούνται από τον χρήστη στο διακομιστή MySQL και μπορούν να χρησιμοποιηθούν σε δηλώσεις SQL.
- Οι λειτουργίες που καθορίζονται από τον χρήστη δημιουργούνται εκτός της MySQL και μπορούν να ενσωματωθούν στον διακομιστή MySQL.