MySQL Λειτουργίες: Συμβολοσειρά, Αριθμητική, Καθορισμένη από το χρήστη, Αποθηκευμένη
Τι είναι οι συναρτήσεις;
MySQL μπορεί να κάνει πολλά περισσότερα από την απλή αποθήκευση και ανάκτηση δεδομένων. Μπορούμε επίσης πραγματοποιήστε χειρισμούς στα δεδομένα πριν την ανάκτηση ή αποθήκευση. Εκεί είναι που MySQL Οι συναρτήσεις μπαίνουν. Οι συναρτήσεις είναι απλώς κομμάτια κώδικα που εκτελούν ορισμένες λειτουργίες και στη συνέχεια επιστρέφουν ένα αποτέλεσμα. Ορισμένες συναρτήσεις δέχονται παραμέτρους ενώ άλλες δεν δέχονται παραμέτρους.
Ας δούμε εν συντομία ένα παράδειγμα MySQL λειτουργία. Από προεπιλογή, MySQL αποθηκεύει τύπους δεδομένων ημερομηνίας στη μορφή «ΕΕΕΕ-ΜΜ-ΗΗ». Ας υποθέσουμε ότι έχουμε δημιουργήσει μια εφαρμογή και οι χρήστες μας θέλουν να επιστραφεί η ημερομηνία με τη μορφή «ΗΗ-ΜΜ-ΕΕΕΕ», μπορούμε να χρησιμοποιήσουμε MySQL ενσωματωμένη συνάρτηση DATE_FORMAT για να επιτευχθεί αυτό. Η DATE_FORMAT είναι μια από τις πιο χρησιμοποιούμενες συναρτήσεις MySQL. Θα το δούμε με περισσότερες λεπτομέρειες καθώς ξεδιπλώνουμε το μάθημα.
Γιατί να χρησιμοποιήσετε λειτουργίες;
Με βάση το παράδειγμα που δίνεται στην εισαγωγή, άτομα με εμπειρία στον προγραμματισμό υπολογιστών μπορεί να σκέφτονται «Γιατί να ασχοληθώ MySQL Λειτουργίες; Το ίδιο αποτέλεσμα μπορεί να επιτευχθεί με τη γλώσσα σεναρίου/προγραμματισμού;» Είναι αλήθεια ότι μπορούμε να το πετύχουμε γράφοντας κάποιες διαδικασίες/λειτουργία στο πρόγραμμα εφαρμογής.
Επιστρέφοντας στο παράδειγμά μας 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 on MySQL ιστοσελίδα.
Αριθμητικές συναρτήσεις
Όπως αναφέρθηκε προηγουμένως, αυτές οι συναρτήσεις λειτουργούν σε τύπους αριθμητικών δεδομένων. Μπορούμε να εκτελέσουμε μαθηματικούς υπολογισμούς σε αριθμητικά δεδομένα στις εντολές SQL.
Αριθμητικοί τελεστές
MySQL υποστηρίζει τους ακόλουθους αριθμητικούς τελεστές που μπορούν να χρησιμοποιηθούν για την εκτέλεση υπολογισμών στις εντολές SQL.
Όνομα | Descriptιόν |
---|---|
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 διαιρεί το N με το M και μας δίνει το υπόλοιπο. Ας δούμε τώρα το παράδειγμα του τελεστή modulo. Θα χρησιμοποιήσουμε τις ίδιες τιμές όπως στα προηγούμενα παραδείγματα.
SELECT 23 % 6 ;
OR
SELECT 23 MOD 6 ;
Η εκτέλεση του παραπάνω σεναρίου μας δίνει 5
Ας δούμε τώρα μερικές από τις κοινές αριθμητικές συναρτήσεις MySQL.
Όροφος – αυτή η συνάρτηση αφαιρεί δεκαδικά ψηφία από έναν αριθμό και τον στρογγυλοποιεί στον πλησιέστερο χαμηλότερο αριθμό. Το σενάριο που φαίνεται παρακάτω δείχνει τη χρήση του.
SELECT FLOOR(23 / 6) AS `floor_result`;
Η εκτέλεση του παραπάνω σεναρίου μας δίνει τα ακόλουθα αποτελέσματα.
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 type DETERMINISTIC STATEMENTS
ΕΔΩ
- "CREATE FUNCTION sf_name ([παράμετροι)]" είναι υποχρεωτικό και λέει MySQL διακομιστή για να δημιουργήσετε μια συνάρτηση με το όνομα `sf_name' με προαιρετικές παραμέτρους που ορίζονται στην παρένθεση.
- "RETURNS τύπος δεδομένων" είναι υποχρεωτικό και καθορίζει τον τύπο δεδομένων που πρέπει να επιστρέψει η συνάρτηση.
- «ΑΠΟΔΟΣΗ» σημαίνει ότι η συνάρτηση θα επιστρέψει τις ίδιες τιμές εάν παρέχονται σε αυτήν τα ίδια ορίσματα.
- «ΔΗΛΩΣΕΙΣ» είναι ο διαδικαστικός κώδικας που εκτελεί η συνάρτηση.
Ας δούμε τώρα ένα πρακτικό παράδειγμα που υλοποιεί μια ενσωματωμένη λειτουργία. Ας υποθέσουμε ότι θέλουμε να μάθουμε ποιες ενοικιαζόμενες ταινίες έχουν περάσει την ημερομηνία επιστροφής. Μπορούμε να δημιουργήσουμε μια αποθηκευμένη συνάρτηση που δέχεται την ημερομηνία επιστροφής ως παράμετρο και στη συνέχεια τη συγκρίνει με την τρέχουσα ημερομηνία MySQL υπηρέτης. Εάν η τρέχουσα ημερομηνία είναι μικρότερη από την ημερομηνία επιστροφής της ταινίας, τότε επιστρέφουμε "Όχι" διαφορετικά επιστρέφουμε "Ναι". Το σενάριο που φαίνεται παρακάτω μας βοηθά να το πετύχουμε.
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|
Εκτελώντας το παραπάνω σενάριο δημιουργήθηκε η αποθηκευμένη συνάρτηση `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 διακομιστή.