Τι είναι η αυτόματη αύξηση;
Η αυτόματη αύξηση είναι μια συνάρτηση που λειτουργεί σε αριθμητικούς τύπους δεδομένων. Δημιουργεί αυτόματα διαδοχικές αριθμητικές τιμές κάθε φορά που μια εγγραφή εισάγεται σε έναν πίνακα για ένα πεδίο που ορίζεται ως αυτόματη αύξηση.
Όταν χρησιμοποιείτε αυτόματη αύξηση;
Στο μάθημα σχετικά με την ομαλοποίηση της βάσης δεδομένων, εξετάσαμε πώς μπορούν να αποθηκευτούν τα δεδομένα με ελάχιστο πλεονασμό, αποθηκεύοντας δεδομένα σε πολλούς μικρούς πίνακες, που σχετίζονται μεταξύ τους χρησιμοποιώντας πρωτεύοντα και ξένα κλειδιά.
Ένα πρωτεύον κλειδί πρέπει να είναι μοναδικό καθώς προσδιορίζει μοναδικά μια σειρά σε μια βάση δεδομένων. Αλλά, πώς μπορούμε να διασφαλίσουμε ότι το πρωτεύον κλειδί είναι πάντα μοναδικό; Μία από τις πιθανές λύσεις θα ήταν, να χρησιμοποιήσετε έναν τύπο για τη δημιουργία του πρωτεύοντος κλειδιού, ο οποίος ελέγχει την ύπαρξη του κλειδιού, στον πίνακα, πριν από την προσθήκη δεδομένων. Αυτό μπορεί να λειτουργήσει καλά, αλλά όπως μπορείτε να δείτε, η προσέγγιση είναι περίπλοκη και δεν είναι αλάνθαστη. Προκειμένου να αποφευχθεί αυτή η πολυπλοκότητα και να διασφαλιστεί ότι το πρωτεύον κλειδί είναι πάντα μοναδικό, μπορούμε να χρησιμοποιήσουμε τη δυνατότητα αυτόματης αύξησης της MySQL για να δημιουργήσουμε πρωτεύοντα κλειδιά. Η αυτόματη αύξηση χρησιμοποιείται με τον τύπο δεδομένων INT. Ο τύπος δεδομένων INT υποστηρίζει τόσο υπογεγραμμένες όσο και μη υπογεγραμμένες τιμές. Οι τύποι δεδομένων χωρίς υπογραφή μπορούν να περιέχουν μόνο θετικούς αριθμούς. Ως βέλτιστη πρακτική, συνιστάται να ορίσετε τον μη υπογεγραμμένο περιορισμό στο πρωτεύον κλειδί αυτόματης αύξησης.
Σύνταξη αυτόματης αύξησης
Ας δούμε τώρα το σενάριο που χρησιμοποιείται για τη δημιουργία του πίνακα κατηγοριών ταινιών.
CREATE TABLE `categories` (`category_id` int(11) AUTO_INCREMENT,`category_name` varchar(150) DEFAULT NULL,`remarks` varchar(500) DEFAULT NULL,PRIMARY KEY (`category_id`));
Παρατηρήστε το "AUTO_INCREMENT" στο πεδίο Category_id. Αυτό αναγκάζει την ταυτότητα κατηγορίας να δημιουργείται αυτόματα κάθε φορά που εισάγεται μια νέα σειρά στον πίνακα. Δεν παρέχεται κατά την εισαγωγή δεδομένων στον πίνακα, η MySQL τα δημιουργεί.
Από προεπιλογή, η τιμή εκκίνησης για AUTO_INCREMENT είναι 1 και θα αυξάνεται κατά 1 για κάθε νέα εγγραφή
Ας εξετάσουμε τα τρέχοντα περιεχόμενα του πίνακα κατηγοριών.
SELECT * FROM `categories`;
Η εκτέλεση του παραπάνω σεναρίου στον πάγκο εργασίας MySQL έναντι του myflixdb μας δίνει τα ακόλουθα αποτελέσματα.
category_id | category_name | remarks |
---|---|---|
1 | Comedy | Movies with humour |
2 | Romantic | Love stories |
3 | Epic | Story acient movies |
4 | Horror | NULL |
5 | Science Fiction | NULL |
6 | Thriller | NULL |
7 | Action | NULL |
8 | Romantic Comedy | NULL |
Ας εισάγουμε τώρα μια νέα κατηγορία στον πίνακα κατηγοριών.
INSERT INTO `categories` (`category_name`) VALUES ('Cartoons');
Η εκτέλεση του παραπάνω σεναρίου έναντι του myflixdb στον πάγκο εργασίας MySQL μας δίνει τα ακόλουθα αποτελέσματα που εμφανίζονται παρακάτω.
category_id | category_name | remarks |
---|---|---|
1 | Comedy | Movies with humour |
2 | Romantic | Love stories |
3 | Epic | Story acient movies |
4 | Horror | NULL |
5 | Science Fiction | NULL |
6 | Thriller | NULL |
7 | Action | NULL |
8 | Romantic Comedy | NULL |
9 | Cartoons | NULL |
Σημειώστε ότι δεν παρέχουμε το αναγνωριστικό κατηγορίας. Η MySQL το δημιούργησε αυτόματα για εμάς, επειδή το αναγνωριστικό κατηγορίας ορίζεται ως αυτόματη αύξηση.
Εάν θέλετε να λάβετε το τελευταίο αναγνωριστικό εισαγωγής που δημιουργήθηκε από τη MySQL, μπορείτε να χρησιμοποιήσετε τη συνάρτηση LAST_INSERT_ID για να το κάνετε αυτό. Το σενάριο που εμφανίζεται παρακάτω λαμβάνει το τελευταίο αναγνωριστικό που δημιουργήθηκε.
SELECT LAST_INSERT_ID();
Η εκτέλεση του παραπάνω σεναρίου δίνει τον τελευταίο αριθμό αυτόματης αύξησης που δημιουργήθηκε από το ερώτημα INSERT. Τα αποτελέσματα φαίνονται παρακάτω.
Περίληψη
- Το χαρακτηριστικό αυτόματης αύξησης όταν καθορίζεται σε μια στήλη με αριθμητικούς τύπους δεδομένων, δημιουργεί διαδοχικούς αριθμούς κάθε φορά που προστίθεται μια νέα σειρά στη βάση δεδομένων.
- Η Αυτόματη αύξηση χρησιμοποιείται συνήθως για τη δημιουργία πρωτευόντων κλειδιών.
- Ο καθορισμένος τύπος δεδομένων στην Αυτόματη αύξηση θα πρέπει να είναι αρκετά μεγάλος για να χωρέσει πολλές εγγραφές. Ο ορισμός του TINYINT ως τύπου δεδομένων για ένα πεδίο αυτόματης αύξησης περιορίζει τον αριθμό των εγγραφών που μπορούν να προστεθούν στον πίνακα σε 255 μόνο εφόσον οποιεσδήποτε τιμές πέραν αυτής δεν θα γίνουν αποδεκτές από τον τύπο δεδομένων TINYINT.
- Θεωρείται καλή πρακτική ο καθορισμός του μη υπογεγραμμένου περιορισμού στα πρωτεύοντα κλειδιά αυτόματης αύξησης για την αποφυγή αρνητικών αριθμών.
- Όταν μια γραμμή διαγράφεται από έναν πίνακα, το αναγνωριστικό αυτόματης αύξησης δεν επαναχρησιμοποιείται. Η MySQL συνεχίζει να δημιουργεί νέους αριθμούς διαδοχικά.
- Από προεπιλογή, η τιμή εκκίνησης για AUTO_INCREMENT είναι 1 και θα αυξάνεται κατά 1 για κάθε νέα εγγραφή
- Για να αφήσετε την ακολουθία AUTO_INCREMENT με άλλη τιμή, χρησιμοποιήστε το AUTO_INCREMENT = 10